diff --git a/debian/changelog b/debian/changelog index 4e8a5a7edd..d3e5726b92 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,13 @@ -gtk+3.0 (3.24.38-2.30~deb12u3) UNRELEASED; urgency=medium +gtk+3.0 (3.24.38-2.10~deb12u3) unstable; urgency=medium * Callisto patches for bookworm + - Mnemonic delete + - Command key as primary modifier (newly reworked to be more complete) + - Symbolic accellabel (Mac-style keyboard shortcuts in menus) + - 16px toolbar icons + - Restore old gtkmessagedialog style - -- Maia Fri, 02 May 2025 09:27:57 -0700 + -- Maia Tue, 09 Jun 2025 20:20:00 -0700 gtk+3.0 (3.24.38-2~deb12u3) bookworm; urgency=medium diff --git a/debian/patches/300_no-mnemonics.patch b/debian/patches/300_no-mnemonics.patch new file mode 100644 index 0000000000..ecf8e8168d --- /dev/null +++ b/debian/patches/300_no-mnemonics.patch @@ -0,0 +1,27899 @@ +Description: Remove mnemonics from non-Roman localized strings +Origin: Callisto Desktop +Author: Maia +Last-Update: 2025-06-09 gtk+3.0 3.24.38 + +diff -urN a/po/am.po b/po/am.po +--- a/po/am.po 2025-06-09 19:54:59.441433875 -0700 ++++ b/po/am.po 2025-06-09 20:11:48.668735679 -0700 +@@ -106,7 +106,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Pause" +-msgstr "ለጥፍ (_P)" ++msgstr "ለጥፍ" + + #: gdk/keyname-table.h:3944 + msgctxt "keyboard label" +@@ -133,19 +133,19 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Home" +-msgstr "መጀመሪያ (_H)" ++msgstr "መጀመሪያ" + + #: gdk/keyname-table.h:3949 + #, fuzzy + msgctxt "keyboard label" + msgid "Left" +-msgstr "ግራ (_L)" ++msgstr "ግራ" + + #: gdk/keyname-table.h:3950 + #, fuzzy + msgctxt "keyboard label" + msgid "Up" +-msgstr "ወደ ላይ (_U)" ++msgstr "ወደ ላይ" + + #: gdk/keyname-table.h:3951 + msgctxt "keyboard label" +@@ -156,7 +156,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Down" +-msgstr "ወደ ታች (_D)" ++msgstr "ወደ ታች" + + #: gdk/keyname-table.h:3953 + #, fuzzy +@@ -168,7 +168,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Page_Down" +-msgstr "ወደ ታች (_D)" ++msgstr "ወደ ታች" + + #: gdk/keyname-table.h:3955 + msgctxt "keyboard label" +@@ -184,7 +184,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Print" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gdk/keyname-table.h:3958 + msgctxt "keyboard label" +@@ -211,25 +211,25 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Enter" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gdk/keyname-table.h:3963 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Home" +-msgstr "መጀመሪያ (_H)" ++msgstr "መጀመሪያ" + + #: gdk/keyname-table.h:3964 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Left" +-msgstr "ግራ (_L)" ++msgstr "ግራ" + + #: gdk/keyname-table.h:3965 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Up" +-msgstr "ወደ ላይ (_U)" ++msgstr "ወደ ላይ" + + #: gdk/keyname-table.h:3966 + msgctxt "keyboard label" +@@ -240,7 +240,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Down" +-msgstr "ወደ ታች (_D)" ++msgstr "ወደ ታች" + + #: gdk/keyname-table.h:3968 + msgctxt "keyboard label" +@@ -281,13 +281,13 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Delete" +-msgstr "አጥፉ (_D)" ++msgstr "አጥፉ" + + #: gdk/keyname-table.h:3976 + #, fuzzy + msgctxt "keyboard label" + msgid "Delete" +-msgstr "አጥፉ (_D)" ++msgstr "አጥፉ" + + #. Description of --sync in --help output + #: gdk/win32/gdkmain-win32.c:54 +@@ -322,7 +322,7 @@ + #: gdk/x11/gdkapplaunchcontext-x11.c:312 + #, fuzzy, c-format + msgid "Starting %s" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gdk/x11/gdkapplaunchcontext-x11.c:316 + #, c-format +@@ -696,7 +696,7 @@ + #: gtk/gtkcolorsel.c:500 + #, fuzzy + msgid "_Palette:" +-msgstr "መደርደሪያ (_P)" ++msgstr "መደርደሪያ" + + #: gtk/gtkcolorsel.c:529 + #, fuzzy +@@ -781,32 +781,32 @@ + #: gtk/gtkcustompaperunixdialog.c:1071 + #, fuzzy + msgid "_Height:" +-msgstr "ቀኝ (_R)" ++msgstr "ቀኝ" + + #: gtk/gtkcustompaperunixdialog.c:1083 + #, fuzzy + msgid "Paper Size" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkcustompaperunixdialog.c:1092 + #, fuzzy + msgid "_Top:" +-msgstr "ወደ ላይ (_T)" ++msgstr "ወደ ላይ" + + #: gtk/gtkcustompaperunixdialog.c:1104 + #, fuzzy + msgid "_Bottom:" +-msgstr "ወደ ታች (_B)" ++msgstr "ወደ ታች" + + #: gtk/gtkcustompaperunixdialog.c:1116 + #, fuzzy + msgid "_Left:" +-msgstr "ግራ (_L)" ++msgstr "ግራ" + + #: gtk/gtkcustompaperunixdialog.c:1128 + #, fuzzy + msgid "_Right:" +-msgstr "ቀኝ (_R)" ++msgstr "ቀኝ" + + #: gtk/gtkcustompaperunixdialog.c:1169 + msgid "Paper Margins" +@@ -814,7 +814,7 @@ + + #: gtk/gtkentry.c:8601 gtk/gtktextview.c:8248 + msgid "Input _Methods" +-msgstr "ዘገባ የማስትገባት ዘዴዎች (_M)" ++msgstr "ዘገባ የማስትገባት ዘዴዎች" + + #: gtk/gtkentry.c:8615 gtk/gtktextview.c:8262 + msgid "_Insert Unicode Control Character" +@@ -943,7 +943,7 @@ + #: gtk/gtkfilechooserdefault.c:3421 + #, fuzzy + msgid "Remove" +-msgstr "አስወግድ (_R)" ++msgstr "አስወግድ" + + #: gtk/gtkfilechooserdefault.c:3430 + #, fuzzy +@@ -963,7 +963,7 @@ + + #: gtk/gtkfilechooserdefault.c:3706 + msgid "_Add" +-msgstr "ጨምር (_A)" ++msgstr "ጨምር" + + #: gtk/gtkfilechooserdefault.c:3713 + msgid "Add the selected folder to the Bookmarks" +@@ -971,7 +971,7 @@ + + #: gtk/gtkfilechooserdefault.c:3718 + msgid "_Remove" +-msgstr "አስወግድ (_R)" ++msgstr "አስወግድ" + + #: gtk/gtkfilechooserdefault.c:3860 + #, fuzzy +@@ -1290,7 +1290,7 @@ + #: gtk/gtklabel.c:6202 + #, fuzzy + msgid "_Open Link" +-msgstr "ክፈት (_O)" ++msgstr "ክፈት" + + #. Copy Link Address + #: gtk/gtklabel.c:6214 +@@ -1300,7 +1300,7 @@ + #: gtk/gtklinkbutton.c:449 + #, fuzzy + msgid "Copy URL" +-msgstr "ቅጂ (_C)" ++msgstr "ቅጂ" + + #: gtk/gtklinkbutton.c:601 + #, fuzzy +@@ -1357,7 +1357,7 @@ + #: gtk/gtkmountoperation.c:491 + #, fuzzy + msgid "Co_nnect" +-msgstr "ለዋጭ (_C)" ++msgstr "ለዋጭ" + + #: gtk/gtkmountoperation.c:558 + msgid "Connect _anonymously" +@@ -1452,7 +1452,7 @@ + #: gtk/gtkpagesetupunixdialog.c:179 + #, fuzzy + msgid "Any Printer" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gtk/gtkpagesetupunixdialog.c:179 + msgid "For portable documents" +@@ -1479,7 +1479,7 @@ + #: gtk/gtkpagesetupunixdialog.c:931 gtk/gtkprintunixdialog.c:3456 + #, fuzzy + msgid "_Paper size:" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkpagesetupunixdialog.c:962 + #, fuzzy +@@ -1568,13 +1568,13 @@ + #, fuzzy + msgctxt "print operation status" + msgid "Printing" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gtk/gtkprintoperation.c:1702 + #, fuzzy + msgctxt "print operation status" + msgid "Finished" +-msgstr "ፈልግ (_F)" ++msgstr "ፈልግ" + + #: gtk/gtkprintoperation.c:1703 + msgctxt "print operation status" +@@ -1594,7 +1594,7 @@ + #: gtk/gtkprintoperation.c:2275 + #, fuzzy, c-format + msgid "Printing %d" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gtk/gtkprintoperation.c:2932 + #, c-format +@@ -1628,7 +1628,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:1998 + #, fuzzy + msgid "Paused" +-msgstr "ለጥፍ (_P)" ++msgstr "ለጥፍ" + + #: gtk/gtkprintoperation-win32.c:617 + msgid "Need user intervention" +@@ -1682,7 +1682,7 @@ + #: gtk/gtkprintunixdialog.c:2139 + #, fuzzy + msgid "Printer" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #. Translators: this is the header for the location column in the print dialog + #: gtk/gtkprintunixdialog.c:2149 +@@ -1745,7 +1745,7 @@ + #: gtk/gtkprintunixdialog.c:2271 + #, fuzzy + msgid "_Reverse" +-msgstr "ወደ ነበረበት መልስ (_R)" ++msgstr "ወደ ነበረበት መልስ" + + #: gtk/gtkprintunixdialog.c:2291 + msgid "General" +@@ -1813,7 +1813,7 @@ + #: gtk/gtkprintunixdialog.c:3054 + #, fuzzy + msgid "Right to left" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gtk/gtkprintunixdialog.c:3066 + msgid "Top to bottom" +@@ -1822,7 +1822,7 @@ + #: gtk/gtkprintunixdialog.c:3067 + #, fuzzy + msgid "Bottom to top" +-msgstr "በመስኮቱ ልክ አጉላ (_F)" ++msgstr "በመስኮቱ ልክ አጉላ" + + #: gtk/gtkprintunixdialog.c:3307 + msgid "Layout" +@@ -1835,17 +1835,17 @@ + #: gtk/gtkprintunixdialog.c:3326 + #, fuzzy + msgid "Pages per _side:" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkprintunixdialog.c:3343 + #, fuzzy + msgid "Page or_dering:" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkprintunixdialog.c:3359 + #, fuzzy + msgid "_Only print:" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #. In enum order + #: gtk/gtkprintunixdialog.c:3374 +@@ -1872,12 +1872,12 @@ + #: gtk/gtkprintunixdialog.c:3410 + #, fuzzy + msgid "Paper _type:" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkprintunixdialog.c:3425 + #, fuzzy + msgid "Paper _source:" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkprintunixdialog.c:3440 + msgid "Output t_ray:" +@@ -1892,7 +1892,7 @@ + #: gtk/gtkprintunixdialog.c:3495 + #, fuzzy + msgid "Portrait" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gtk/gtkprintunixdialog.c:3496 + msgid "Landscape" +@@ -1928,7 +1928,7 @@ + #: gtk/gtkprintunixdialog.c:3591 + #, fuzzy + msgid "_Now" +-msgstr "አይ (_N)" ++msgstr "አይ" + + #: gtk/gtkprintunixdialog.c:3602 + msgid "A_t:" +@@ -1951,7 +1951,7 @@ + #: gtk/gtkprintunixdialog.c:3634 + #, fuzzy + msgid "On _hold" +-msgstr "ደማቅ (_B)" ++msgstr "ደማቅ" + + #: gtk/gtkprintunixdialog.c:3635 + msgid "Hold the job until it is explicitly released" +@@ -1995,7 +1995,7 @@ + #: gtk/gtkprintunixdialog.c:3808 + #, fuzzy + msgid "Color" +-msgstr "ቀለም (_C)" ++msgstr "ቀለም" + + #. Translators: this will appear as tab label in print dialog. + #. It's a typographical term, as in "Binding and finishing" +@@ -2010,7 +2010,7 @@ + #: gtk/gtkprintunixdialog.c:3846 + #, fuzzy + msgid "Print" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gtk/gtkrc.c:2834 + #, c-format +@@ -2063,7 +2063,7 @@ + #: gtk/gtkrecentchooserdefault.c:1805 + #, fuzzy + msgid "_Clear List" +-msgstr "ሰርዝ (_C)" ++msgstr "ሰርዝ" + + #: gtk/gtkrecentchooserdefault.c:1819 + msgid "Show _Private Resources" +@@ -2172,61 +2172,61 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Add" +-msgstr "ጨምር (_A)" ++msgstr "ጨምር" + + #: gtk/gtkstock.c:323 + #, fuzzy + msgctxt "Stock label" + msgid "_Apply" +-msgstr "ተጠቀም (_A)" ++msgstr "ተጠቀም" + + #: gtk/gtkstock.c:324 + #, fuzzy + msgctxt "Stock label" + msgid "_Bold" +-msgstr "ደማቅ (_B)" ++msgstr "ደማቅ" + + #: gtk/gtkstock.c:325 + #, fuzzy + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ተወው (_C)" ++msgstr "ተወው" + + #: gtk/gtkstock.c:326 + #, fuzzy + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "ሲዲ-ሮም (_C)" ++msgstr "ሲዲ-ሮም" + + #: gtk/gtkstock.c:327 + #, fuzzy + msgctxt "Stock label" + msgid "_Clear" +-msgstr "ሰርዝ (_C)" ++msgstr "ሰርዝ" + + #: gtk/gtkstock.c:328 + #, fuzzy + msgctxt "Stock label" + msgid "_Close" +-msgstr "ዝጋ (_C)" ++msgstr "ዝጋ" + + #: gtk/gtkstock.c:329 + #, fuzzy + msgctxt "Stock label" + msgid "C_onnect" +-msgstr "ለዋጭ (_C)" ++msgstr "ለዋጭ" + + #: gtk/gtkstock.c:330 + #, fuzzy + msgctxt "Stock label" + msgid "_Convert" +-msgstr "ለዋጭ (_C)" ++msgstr "ለዋጭ" + + #: gtk/gtkstock.c:331 + #, fuzzy + msgctxt "Stock label" + msgid "_Copy" +-msgstr "ቅጂ (_C)" ++msgstr "ቅጂ" + + #: gtk/gtkstock.c:332 + #, fuzzy +@@ -2238,7 +2238,7 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Delete" +-msgstr "አጥፉ (_D)" ++msgstr "አጥፉ" + + #: gtk/gtkstock.c:334 + #, fuzzy +@@ -2250,13 +2250,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "ለዋጭ (_C)" ++msgstr "ለዋጭ" + + #: gtk/gtkstock.c:336 + #, fuzzy + msgctxt "Stock label" + msgid "_Execute" +-msgstr "አስኪድ (_E)" ++msgstr "አስኪድ" + + #: gtk/gtkstock.c:337 + #, fuzzy +@@ -2274,19 +2274,19 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Find" +-msgstr "ፈልግ (_F)" ++msgstr "ፈልግ" + + #: gtk/gtkstock.c:340 + #, fuzzy + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ፈልግ እና ተካ (_R)" ++msgstr "ፈልግ እና ተካ" + + #: gtk/gtkstock.c:341 + #, fuzzy + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ፍሎፒ (_F)" ++msgstr "ፍሎፒ" + + #: gtk/gtkstock.c:342 + msgctxt "Stock label" +@@ -2303,56 +2303,56 @@ + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "ወደ ታች (_B)" ++msgstr "ወደ ታች" + + #. This is a navigation label as in "go to the first page" + #: gtk/gtkstock.c:347 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "መጀመሪያ (_F)" ++msgstr "መጀመሪያ" + + #. This is a navigation label as in "go to the last page" + #: gtk/gtkstock.c:349 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "መጨረሻ (_L)" ++msgstr "መጨረሻ" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/gtkstock.c:351 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ወደ ላይ (_T)" ++msgstr "ወደ ላይ" + + #. This is a navigation label as in "go back" + #: gtk/gtkstock.c:353 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "ወደኋላ (_B)" ++msgstr "ወደኋላ" + + #. This is a navigation label as in "go down" + #: gtk/gtkstock.c:355 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "ወደ ታች (_D)" ++msgstr "ወደ ታች" + + #. This is a navigation label as in "go forward" + #: gtk/gtkstock.c:357 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ወደፊት (_F)" ++msgstr "ወደፊት" + + #. This is a navigation label as in "go up" + #: gtk/gtkstock.c:359 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ወደ ላይ (_U)" ++msgstr "ወደ ላይ" + + #: gtk/gtkstock.c:360 + msgctxt "Stock label" +@@ -2363,13 +2363,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Help" +-msgstr "መረጃ (_H)" ++msgstr "መረጃ" + + #: gtk/gtkstock.c:362 + #, fuzzy + msgctxt "Stock label" + msgid "_Home" +-msgstr "መጀመሪያ (_H)" ++msgstr "መጀመሪያ" + + #: gtk/gtkstock.c:363 + msgctxt "Stock label" +@@ -2385,7 +2385,7 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Index" +-msgstr "ማውጫ (_I)" ++msgstr "ማውጫ" + + #: gtk/gtkstock.c:366 + #, fuzzy +@@ -2397,20 +2397,20 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Italic" +-msgstr "አይታሊክ ማድረጊያ (_I)" ++msgstr "አይታሊክ ማድረጊያ" + + #: gtk/gtkstock.c:368 + #, fuzzy + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ይለፉ ወደ (_J)" ++msgstr "ይለፉ ወደ" + + #. This is about text justification, "centered text" + #: gtk/gtkstock.c:370 + #, fuzzy + msgctxt "Stock label" + msgid "_Center" +-msgstr "ለዋጭ (_C)" ++msgstr "ለዋጭ" + + #. This is about text justification + #: gtk/gtkstock.c:372 +@@ -2424,35 +2424,35 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Left" +-msgstr "ግራ (_L)" ++msgstr "ግራ" + + #. This is about text justification, "right-justified text" + #: gtk/gtkstock.c:376 + #, fuzzy + msgctxt "Stock label" + msgid "_Right" +-msgstr "ቀኝ (_R)" ++msgstr "ቀኝ" + + #. Media label, as in "fast forward" + #: gtk/gtkstock.c:379 + #, fuzzy + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ወደፊት (_F)" ++msgstr "ወደፊት" + + #. Media label, as in "next song" + #: gtk/gtkstock.c:381 + #, fuzzy + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "አዲስ (_N)" ++msgstr "አዲስ" + + #. Media label, as in "pause music" + #: gtk/gtkstock.c:383 + #, fuzzy + msgctxt "Stock label, media" + msgid "P_ause" +-msgstr "ለጥፍ (_P)" ++msgstr "ለጥፍ" + + #. Media label, as in "play music" + #: gtk/gtkstock.c:385 +@@ -2480,44 +2480,44 @@ + #, fuzzy + msgctxt "Stock label, media" + msgid "R_ewind" +-msgstr "ፈልግ (_F)" ++msgstr "ፈልግ" + + #. Media label + #: gtk/gtkstock.c:393 + #, fuzzy + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "አቁም (_S)" ++msgstr "አቁም" + + #: gtk/gtkstock.c:394 + #, fuzzy + msgctxt "Stock label" + msgid "_Network" +-msgstr "አዲስ (_N)" ++msgstr "አዲስ" + + #: gtk/gtkstock.c:395 + #, fuzzy + msgctxt "Stock label" + msgid "_New" +-msgstr "አዲስ (_N)" ++msgstr "አዲስ" + + #: gtk/gtkstock.c:396 + #, fuzzy + msgctxt "Stock label" + msgid "_No" +-msgstr "አይ (_N)" ++msgstr "አይ" + + #: gtk/gtkstock.c:397 + #, fuzzy + msgctxt "Stock label" + msgid "_OK" +-msgstr "እሺ (_O)" ++msgstr "እሺ" + + #: gtk/gtkstock.c:398 + #, fuzzy + msgctxt "Stock label" + msgid "_Open" +-msgstr "ክፈት (_O)" ++msgstr "ክፈት" + + #. Page orientation + #: gtk/gtkstock.c:400 +@@ -2530,7 +2530,7 @@ + #, fuzzy + msgctxt "Stock label" + msgid "Portrait" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #. Page orientation + #: gtk/gtkstock.c:404 +@@ -2554,19 +2554,19 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Paste" +-msgstr "ለጥፍ (_P)" ++msgstr "ለጥፍ" + + #: gtk/gtkstock.c:409 + #, fuzzy + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkstock.c:410 + #, fuzzy + msgctxt "Stock label" + msgid "_Print" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: gtk/gtkstock.c:411 + #, fuzzy +@@ -2578,49 +2578,49 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Properties" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #: gtk/gtkstock.c:413 + #, fuzzy + msgctxt "Stock label" + msgid "_Quit" +-msgstr "ውጣ (_Q)" ++msgstr "ውጣ" + + #: gtk/gtkstock.c:414 + #, fuzzy + msgctxt "Stock label" + msgid "_Redo" +-msgstr "እንደገና አድርግ (_R)" ++msgstr "እንደገና አድርግ" + + #: gtk/gtkstock.c:415 + #, fuzzy + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "በድጋሚ ጀምር (_R)" ++msgstr "በድጋሚ ጀምር" + + #: gtk/gtkstock.c:416 + #, fuzzy + msgctxt "Stock label" + msgid "_Remove" +-msgstr "አስወግድ (_R)" ++msgstr "አስወግድ" + + #: gtk/gtkstock.c:417 + #, fuzzy + msgctxt "Stock label" + msgid "_Revert" +-msgstr "ወደ ነበረበት መልስ (_R)" ++msgstr "ወደ ነበረበት መልስ" + + #: gtk/gtkstock.c:418 + #, fuzzy + msgctxt "Stock label" + msgid "_Save" +-msgstr "አስቀምጥ (_S)" ++msgstr "አስቀምጥ" + + #: gtk/gtkstock.c:419 + #, fuzzy + msgctxt "Stock label" + msgid "Save _As" +-msgstr "በሌላ ስም አስቀምጥ (_A)" ++msgstr "በሌላ ስም አስቀምጥ" + + #: gtk/gtkstock.c:420 + #, fuzzy +@@ -2632,13 +2632,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Color" +-msgstr "ቀለም (_C)" ++msgstr "ቀለም" + + #: gtk/gtkstock.c:422 + #, fuzzy + msgctxt "Stock label" + msgid "_Font" +-msgstr "የፊደል ቅርጽ (_F)" ++msgstr "የፊደል ቅርጽ" + + #. Sorting direction + #: gtk/gtkstock.c:424 +@@ -2661,7 +2661,7 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Stop" +-msgstr "አቁም (_S)" ++msgstr "አቁም" + + #. Font variant + #: gtk/gtkstock.c:430 +@@ -2674,26 +2674,26 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "አታጥፋ (_U)" ++msgstr "አታጥፋ" + + #. Font variant + #: gtk/gtkstock.c:433 + #, fuzzy + msgctxt "Stock label" + msgid "_Underline" +-msgstr "የስር መስመር (_U)" ++msgstr "የስር መስመር" + + #: gtk/gtkstock.c:434 + #, fuzzy + msgctxt "Stock label" + msgid "_Undo" +-msgstr "ወደ ነበረበት መልስ (_U)" ++msgstr "ወደ ነበረበት መልስ" + + #: gtk/gtkstock.c:435 + #, fuzzy + msgctxt "Stock label" + msgid "_Yes" +-msgstr "አዎ (_Y)" ++msgstr "አዎ" + + #. Zoom + #: gtk/gtkstock.c:437 +@@ -2711,13 +2711,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "ከቅርበት ዕይታ (_I)" ++msgstr "ከቅርበት ዕይታ" + + #: gtk/gtkstock.c:441 + #, fuzzy + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ከርቀት ዕይታ (_O)" ++msgstr "ከርቀት ዕይታ" + + #: gtk/gtktextbufferrichtext.c:650 + #, c-format +@@ -3505,7 +3505,7 @@ + #, fuzzy + msgctxt "paper size" + msgid "Executive" +-msgstr "አስኪድ (_E)" ++msgstr "አስኪድ" + + #: gtk/paper_names_offsets.c:118 + msgctxt "paper size" +@@ -3541,7 +3541,7 @@ + #, fuzzy + msgctxt "paper size" + msgid "Index 3x5" +-msgstr "ማውጫ (_I)" ++msgstr "ማውጫ" + + #: gtk/paper_names_offsets.c:125 + msgctxt "paper size" +@@ -3552,13 +3552,13 @@ + #, fuzzy + msgctxt "paper size" + msgid "Index 4x6 ext" +-msgstr "ማውጫ (_I)" ++msgstr "ማውጫ" + + #: gtk/paper_names_offsets.c:127 + #, fuzzy + msgctxt "paper size" + msgid "Index 5x8" +-msgstr "ማውጫ (_I)" ++msgstr "ማውጫ" + + #: gtk/paper_names_offsets.c:128 + msgctxt "paper size" +@@ -3659,7 +3659,7 @@ + #, fuzzy + msgctxt "paper size" + msgid "Folio" +-msgstr "ቀለም (_C)" ++msgstr "ቀለም" + + #: gtk/paper_names_offsets.c:148 + msgctxt "paper size" +@@ -4191,7 +4191,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:3527 + #, fuzzy + msgid "Pages per Sheet" +-msgstr "ምርጫዎች (_P)" ++msgstr "ምርጫዎች" + + #. Translators, this string is used to label the job priority option + #. * in the print dialog +@@ -4261,7 +4261,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:3660 + #, fuzzy + msgid "Print at" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #. Translators: this is the name of the option that allows the user + #. * to specify a time when a print job will be printed. +@@ -4269,7 +4269,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:3671 + #, fuzzy + msgid "Print at time" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #. Translators: this format is used to display a custom paper + #. * size. The two placeholders are replaced with the width and height +@@ -4289,7 +4289,7 @@ + #: modules/printbackends/file/gtkprintbackendfile.c:493 + #, fuzzy + msgid "Print to File" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: modules/printbackends/file/gtkprintbackendfile.c:570 + msgid "PDF" +@@ -4298,7 +4298,7 @@ + #: modules/printbackends/file/gtkprintbackendfile.c:570 + #, fuzzy + msgid "Postscript" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: modules/printbackends/file/gtkprintbackendfile.c:570 + msgid "SVG" +@@ -4351,7 +4351,7 @@ + #: modules/printbackends/papi/gtkprintbackendpapi.c:836 + #, fuzzy + msgid "paused" +-msgstr "ለጥፍ (_P)" ++msgstr "ለጥፍ" + + #. SUN_BRANDING + #: modules/printbackends/papi/gtkprintbackendpapi.c:839 +@@ -4368,7 +4368,7 @@ + #: modules/printbackends/test/gtkprintbackendtest.c:467 + #, fuzzy + msgid "Print to Test Printer" +-msgstr "አትም (_P)" ++msgstr "አትም" + + #: tests/testfilechooser.c:207 + #, c-format +@@ -4455,7 +4455,7 @@ + #~ msgstr "ፋይል _አጥፉ" + + #~ msgid "_Rename File" +-#~ msgstr "ፋይልን እንደገና ሰይም (_R)" ++#~ msgstr "ፋይልን እንደገና ሰይም" + + #~ msgid "New Folder" + #~ msgstr "አዲስ ዶሴ" +@@ -4506,7 +4506,7 @@ + + #, fuzzy + #~ msgid "_Mode:" +-#~ msgstr "የአሠራሩ ዘዴ፦ (_M)" ++#~ msgstr "የአሠራሩ ዘዴ፦" + + #, fuzzy + #~ msgid "_Pressure:" +@@ -4523,7 +4523,7 @@ + + #, fuzzy + #~ msgid "Cl_ear" +-#~ msgstr "ሰርዝ (_C)" ++#~ msgstr "ሰርዝ" + + #~ msgid "--- No Tip ---" + #~ msgstr "--- ምንም ፍንጭ የልም ---" +@@ -4534,19 +4534,19 @@ + + #, fuzzy + #~ msgid "Justify|_Center" +-#~ msgstr "መሀከል (_C)" ++#~ msgstr "መሀከል" + + #, fuzzy + #~ msgid "Media|_Next" +-#~ msgstr "አዲስ (_N)" ++#~ msgstr "አዲስ" + + #, fuzzy + #~ msgid "Media|P_ause" +-#~ msgstr "ለጥፍ (_P)" ++#~ msgstr "ለጥፍ" + + #, fuzzy + #~ msgid "Media|_Stop" +-#~ msgstr "አቁም (_S)" ++#~ msgstr "አቁም" + + #, fuzzy + #~ msgid "Could not get a stock icon for %s\n" +@@ -4558,7 +4558,7 @@ + + #, fuzzy + #~ msgid "_All" +-#~ msgstr "ተጠቀም (_A)" ++#~ msgstr "ተጠቀም" + + #, fuzzy + #~ msgid "Today" +@@ -4607,7 +4607,7 @@ + + #, fuzzy + #~ msgid "Add" +-#~ msgstr "ጨምር (_A)" ++#~ msgstr "ጨምር" + + #, fuzzy + #~ msgid "_Filename:" +diff -urN a/po/as.po b/po/as.po +--- a/po/as.po 2025-06-09 19:54:59.445433913 -0700 ++++ b/po/as.po 2025-06-09 20:11:48.688735939 -0700 +@@ -580,32 +580,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "বিষয়ে (_A)" ++msgstr "বিষয়ে" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "যোগ কৰক (_A)" ++msgstr "যোগ কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "গাঢ় (_B)" ++msgstr "গাঢ়" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "চিডিৰম (_C)" ++msgstr "চিডিৰম" + + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "পৰিশ্ৰুত কৰক (_C)" ++msgstr "পৰিশ্ৰুত কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "বন্ধ কৰক (_C)" ++msgstr "বন্ধ কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -622,7 +622,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "নকল কৰক (_C)" ++msgstr "নকল কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -632,7 +632,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "আঁতৰাওক (_D)" ++msgstr "আঁতৰাওক" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -658,95 +658,95 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "সঞ্চালন কৰক (_E)" ++msgstr "সঞ্চালন কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "ফাইল (_F)" ++msgstr "ফাইল" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "অনুসন্ধান (_F)" ++msgstr "অনুসন্ধান" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "অনুসন্ধান আৰু প্ৰতিস্থাপন (_R)" ++msgstr "অনুসন্ধান আৰু প্ৰতিস্থাপন" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ফ্লপি (_F)" ++msgstr "ফ্লপি" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "সম্পূৰ্ণ পৰ্দ্দাত প্ৰদৰ্শন (_F)" ++msgstr "সম্পূৰ্ণ পৰ্দ্দাত প্ৰদৰ্শন" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "তলত (_B)" ++msgstr "তলত" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "প্ৰথম (_F)" ++msgstr "প্ৰথম" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "সৰ্বশেষ (_L)" ++msgstr "সৰ্বশেষ" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ওপৰত (_T)" ++msgstr "ওপৰত" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "পূৰ্ববৰ্তী (_B)" ++msgstr "পূৰ্ববৰ্তী" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "তলত (_D)" ++msgstr "তলত" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "এৰি যাওক (_F)" ++msgstr "এৰি যাওক" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ওপৰত (_U)" ++msgstr "ওপৰত" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "হাৰ্ড-ডিস্ক (_H)" ++msgstr "হাৰ্ড-ডিস্ক" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "সহায় স(_H)" ++msgstr "সহায় স" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ব্যক্তিগত ফোল্ডাৰ (_H)" ++msgstr "ব্যক্তিগত ফোল্ডাৰ" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -756,58 +756,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "তথ্য (_I)" ++msgstr "তথ্য" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ইটালিক (_I)" ++msgstr "ইটালিক" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "চিহ্নিত স্থানলৈ যাওক (_J)" ++msgstr "চিহ্নিত স্থানলৈ যাওক" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "কেন্দ্ৰস্থিত (_C)" ++msgstr "কেন্দ্ৰস্থিত" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "পূৰণ (_F)" ++msgstr "পূৰণ" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "বাওঁফালে (_L)" ++msgstr "বাওঁফালে" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "সোঁফালে (_R)" ++msgstr "সোঁফালে" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "সম্পূৰ্ণ পৰ্দ্দাত প্ৰদৰ্শন বন্ধ কৰা হ'ব (_L)" ++msgstr "সম্পূৰ্ণ পৰ্দ্দাত প্ৰদৰ্শন বন্ধ কৰা হ'ব" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "আগলৈ যাওক (_F)" ++msgstr "আগলৈ যাওক" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "পৰবৰ্তী (_N)" ++msgstr "পৰবৰ্তী" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -819,7 +819,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "বজোৱা হ'ব (_P)" ++msgstr "বজোৱা হ'ব" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -831,7 +831,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "ৰেকৰ্ড কৰা হ'ব (_R)" ++msgstr "ৰেকৰ্ড কৰা হ'ব" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -843,32 +843,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "বন্ধ কৰক (_S)" ++msgstr "বন্ধ কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "নেটৱৰ্ক (_N)" ++msgstr "নেটৱৰ্ক" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "নতুন (_N)" ++msgstr "নতুন" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "খোলক (_O)" ++msgstr "খোলক" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "আঠা লগাওক (_P)" ++msgstr "আঠা লগাওক" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "মূদ্ৰণ কৰক (_P)" ++msgstr "মূদ্ৰণ কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -878,86 +878,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "বিবিধ বৈশিষ্ট্য (_P)" ++msgstr "বিবিধ বৈশিষ্ট্য" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "প্ৰস্থান (_Q)" ++msgstr "প্ৰস্থান" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "পুনৰাবৃত্তি (_R)" ++msgstr "পুনৰাবৃত্তি" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "নতুনকৈ প্ৰদৰ্শন (_R)" ++msgstr "নতুনকৈ প্ৰদৰ্শন" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "আঁতৰাওক (_R)" ++msgstr "আঁতৰাওক" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "পূৰ্বাবস্থা (_R)" ++msgstr "পূৰ্বাবস্থা" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "সংৰক্ষণ কৰক (_S)" ++msgstr "সংৰক্ষণ কৰক" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "নতুন ৰূপে সংৰক্ষণ (_A)" ++msgstr "নতুন ৰূপে সংৰক্ষণ" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "সমগ্ৰ বাছক (_A)" ++msgstr "সমগ্ৰ বাছক" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ঊৰ্ধ্ব ক্ৰমানুসাৰে (_A)" ++msgstr "ঊৰ্ধ্ব ক্ৰমানুসাৰে" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "নিম্ন ক্ৰমানুসাৰে (_D)" ++msgstr "নিম্ন ক্ৰমানুসাৰে" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "বানান-পৰীক্ষণ (_S)" ++msgstr "বানান-পৰীক্ষণ" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "বন্ধ কৰক (_S)" ++msgstr "বন্ধ কৰক" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "মধ্যৰেখাঙ্কন (_S)" ++msgstr "মধ্যৰেখাঙ্কন" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "নিম্নৰেখাঙ্কন (_U)" ++msgstr "নিম্নৰেখাঙ্কন" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "পূৰ্বাবস্থা (_U)" ++msgstr "পূৰ্বাবস্থা" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -968,23 +968,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "স্বাভাবিক মাপ (_N)" ++msgstr "স্বাভাবিক মাপ" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "সৰ্বোত্তম মাপ (_F)" ++msgstr "সৰ্বোত্তম মাপ" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "ডাঙৰ কৰি প্ৰদৰ্শন (_I)" ++msgstr "ডাঙৰ কৰি প্ৰদৰ্শন" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "সৰু কৰি প্ৰদৰ্শন (_O)" ++msgstr "সৰু কৰি প্ৰদৰ্শন" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1044,7 +1044,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "বৰ্ণৰ অনুক্ৰম (_H):" ++msgstr "বৰ্ণৰ অনুক্ৰম:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1060,7 +1060,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "মান (_V):" ++msgstr "মান:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1068,7 +1068,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "ৰঙা (_R):" ++msgstr "ৰঙা:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1076,7 +1076,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "সেউজীয়া (_G):" ++msgstr "সেউজীয়া:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1084,7 +1084,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "নীলা (_B):" ++msgstr "নীলা:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1113,7 +1113,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "পেলেট (_P):" ++msgstr "পেলেট:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1150,7 +1150,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "ইয়াত ৰং ৰক্ষা কৰক (_S)" ++msgstr "ইয়াত ৰং ৰক্ষা কৰক" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1174,7 +1174,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "বাতিল কৰক (_C)" ++msgstr "বাতিল কৰক" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1182,11 +1182,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "বাছক (_S) " ++msgstr "বাছক " + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "সহায় (_H)" ++msgstr "সহায়" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1200,11 +1200,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "পৰিবাৰ (_F):" ++msgstr "পৰিবাৰ:" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "স্ৰজন-প্ৰণালী (_S):" ++msgstr "স্ৰজন-প্ৰণালী:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1213,18 +1213,18 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "পূব‌-দৃশ্য (_P):" ++msgstr "পূব‌-দৃশ্য:" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "প্ৰয়োগ কৰক (_A)" ++msgstr "প্ৰয়োগ কৰক" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11638 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "ঠিক আছে (_O)" ++msgstr "ঠিক আছে" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1242,12 +1242,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "প্ৰয়োগ কৰক (_A)" ++msgstr "প্ৰয়োগ কৰক" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "বাতিল (_C)" ++msgstr "বাতিল" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1257,37 +1257,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "ৰূপান্তৰ কৰক (_C)" ++msgstr "ৰূপান্তৰ কৰক" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "বৰ্জন কৰক (_D)" ++msgstr "বৰ্জন কৰক" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "সংযোগ বিচ্ছিন্ন কৰক (_D)" ++msgstr "সংযোগ বিচ্ছিন্ন কৰক" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "সম্পাদনা (_E)" ++msgstr "সম্পাদনা" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "সূচিপত্ৰ (_I)" ++msgstr "সূচিপত্ৰ" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "না (_N)" ++msgstr "না" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ঠিক আছে (_O)" ++msgstr "ঠিক আছে" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1321,27 +1321,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "পছন্দ (_P)" ++msgstr "পছন্দ" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "ৰং (_C)" ++msgstr "ৰং" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ফন্ট (_F)" ++msgstr "ফন্ট" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "পুনৰুদ্ধাৰ (_U)" ++msgstr "পুনৰুদ্ধাৰ" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "হয় (_Y)" ++msgstr "হয়" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2006,7 +2006,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "স্ববাছক (_C)" ++msgstr "স্ববাছক" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2021,7 +2021,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "বন্ধ কৰক (_C)" ++msgstr "বন্ধ কৰক" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2047,11 +2047,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "বহল (_W):" ++msgstr "বহল:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "উচ্চতা (_H):" ++msgstr "উচ্চতা:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2059,19 +2059,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "ওপৰ (_T):" ++msgstr "ওপৰ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "তল (_B):" ++msgstr "তল:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "বাওঁ ফালৰ (_L):" ++msgstr "বাওঁ ফালৰ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "সোঁ ফালৰ (_R):" ++msgstr "সোঁ ফালৰ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2085,20 +2085,20 @@ + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "কপি কৰক (_C)" ++msgstr "কপি কৰক" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "পেইস্ট কৰক (_P)" ++msgstr "পেইস্ট কৰক" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "মচি পেলাওক (_D)" ++msgstr "মচি পেলাওক" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "সকলো বাছক (_A)" ++msgstr "সকলো বাছক" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2119,7 +2119,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3269 + msgid "_Open" +-msgstr "খোলক (_O)" ++msgstr "খোলক" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2191,28 +2191,28 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "ফাইল ভ্ৰমণ কৰক (_V)" ++msgstr "ফাইল ভ্ৰমণ কৰক" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +-msgstr "অৱস্থান কপি কৰক (_C)" ++msgstr "অৱস্থান কপি কৰক" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "পত্ৰচিহ্নলৈ যোগ কৰক (_A)" ++msgstr "পত্ৰচিহ্নলৈ যোগ কৰক" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "গুপ্ত ফাইল দেখুৱাওক (_H)" ++msgstr "গুপ্ত ফাইল দেখুৱাওক" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "মাপ শীৰ্ষক কলাম প্ৰদৰ্শিত হ'ব (_S)" ++msgstr "মাপ শীৰ্ষক কলাম প্ৰদৰ্শিত হ'ব" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "নাম (_N):" ++msgstr "নাম:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2267,7 +2267,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "প্ৰতিস্থাপন কৰক (_R)" ++msgstr "প্ৰতিস্থাপন কৰক" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2367,7 +2367,7 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "সংযোগ খোলক (_O)" ++msgstr "সংযোগ খোলক" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 +@@ -2518,11 +2518,11 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "নহয় (_N)" ++msgstr "নহয়" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "হয় (_Y)" ++msgstr "হয়" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2534,7 +2534,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "বেনামী (_A)" ++msgstr "বেনামী" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2542,15 +2542,15 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "ব্যৱহাৰকাৰীনাম (_U)" ++msgstr "ব্যৱহাৰকাৰীনাম" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "ডমেইন (_D)" ++msgstr "ডমেইন" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "পাছৱৰ্ড (_P)" ++msgstr "পাছৱৰ্ড" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +@@ -2575,7 +2575,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "প্ৰক্ৰিয়া অন্ত কৰক (_E)" ++msgstr "প্ৰক্ৰিয়া অন্ত কৰক" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2737,45 +2737,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2226 ../gtk/gtkplacessidebar.c:3347 + msgid "_Start" +-msgstr "আৰম্ভ কৰক (_S)" ++msgstr "আৰম্ভ কৰক" + + #: ../gtk/gtkplacessidebar.c:2227 ../gtk/gtkplacessidebar.c:3354 + msgid "_Stop" +-msgstr "বন্ধ কৰক (_S)" ++msgstr "বন্ধ কৰক" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2234 + msgid "_Power On" +-msgstr "আৰম্ভ কৰক (_P)" ++msgstr "আৰম্ভ কৰক" + + #: ../gtk/gtkplacessidebar.c:2235 + msgid "_Safely Remove Drive" +-msgstr "নিৰাপদভাবে ড্ৰাইভ আঁতৰাওক (_S)" ++msgstr "নিৰাপদভাবে ড্ৰাইভ আঁতৰাওক" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Connect Drive" +-msgstr "ড্ৰাইভ সংযোগ কৰক (_C)" ++msgstr "ড্ৰাইভ সংযোগ কৰক" + + #: ../gtk/gtkplacessidebar.c:2240 + msgid "_Disconnect Drive" +-msgstr "ড্ৰাইভ বিচ্ছিন্ন কৰক (_D)" ++msgstr "ড্ৰাইভ বিচ্ছিন্ন কৰক" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Start Multi-disk Device" +-msgstr "মাল্টি-ডিস্ক ডিভাইচ আৰম্ভ কৰক (_S)" ++msgstr "মাল্টি-ডিস্ক ডিভাইচ আৰম্ভ কৰক" + + #: ../gtk/gtkplacessidebar.c:2245 + msgid "_Stop Multi-disk Device" +-msgstr "মাল্টি-ডিস্ক ডিভাইচ বন্ধ কৰক (_S)" ++msgstr "মাল্টি-ডিস্ক ডিভাইচ বন্ধ কৰক" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2250 + msgid "_Unlock Drive" +-msgstr "ড্ৰাইভ আনলক কৰক (_U)" ++msgstr "ড্ৰাইভ আনলক কৰক" + + #: ../gtk/gtkplacessidebar.c:2251 + msgid "_Lock Drive" +-msgstr "ড্ৰাইভ লক কৰক (_L)" ++msgstr "ড্ৰাইভ লক কৰক" + + #: ../gtk/gtkplacessidebar.c:2280 ../gtk/gtkplacessidebar.c:3029 + #, c-format +@@ -2810,15 +2810,15 @@ + + #: ../gtk/gtkplacessidebar.c:3277 + msgid "Open in New _Tab" +-msgstr "নতুন টেবত খোলক (_T)" ++msgstr "নতুন টেবত খোলক" + + #: ../gtk/gtkplacessidebar.c:3286 + msgid "Open in New _Window" +-msgstr "নতুন উইন্ডোত খোলক (_W)" ++msgstr "নতুন উইন্ডোত খোলক" + + #: ../gtk/gtkplacessidebar.c:3295 + msgid "_Add Bookmark" +-msgstr "পত্ৰচিহ্ন যোগ কৰক (_A)" ++msgstr "পত্ৰচিহ্ন যোগ কৰক" + + #: ../gtk/gtkplacessidebar.c:3301 + msgid "Remove" +@@ -2830,19 +2830,19 @@ + + #: ../gtk/gtkplacessidebar.c:3319 + msgid "_Mount" +-msgstr "মাউন্ট কৰক (_M)" ++msgstr "মাউন্ট কৰক" + + #: ../gtk/gtkplacessidebar.c:3326 + msgid "_Unmount" +-msgstr "আনমাউন্ট কৰক (_U)" ++msgstr "আনমাউন্ট কৰক" + + #: ../gtk/gtkplacessidebar.c:3333 + msgid "_Eject" +-msgstr "বাহিৰ কৰক (_E)" ++msgstr "বাহিৰ কৰক" + + #: ../gtk/gtkplacessidebar.c:3340 + msgid "_Detect Media" +-msgstr "মাধ্যম চিনাক্ত কৰক (_D)" ++msgstr "মাধ্যম চিনাক্ত কৰক" + + #: ../gtk/gtkplacessidebar.c:3946 + msgid "Computer" +@@ -2854,7 +2854,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "পাছৱৰ্ড মনত ৰাখক (_R)" ++msgstr "পাছৱৰ্ড মনত ৰাখক" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3005,7 +3005,7 @@ + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "প্ৰিন্ট কৰক (_P)" ++msgstr "প্ৰিন্ট কৰক" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3108,19 +3108,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "স্থান নকল কৰক (_L)" ++msgstr "স্থান নকল কৰক" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "তালিকাৰ পৰা আঁতৰাই দিয়ক (_R)" ++msgstr "তালিকাৰ পৰা আঁতৰাই দিয়ক" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "তালিকা পৰিষ্কাৰ কৰক (_C)" ++msgstr "তালিকা পৰিষ্কাৰ কৰক" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "ব্যক্তিগত সম্পদ প্ৰদৰ্শন কৰক(_P)" ++msgstr "ব্যক্তিগত সম্পদ প্ৰদৰ্শন কৰক" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3321,11 +3321,11 @@ + + #: ../gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM বাওঁ-ফালৰ-পৰা-সোঁ-ফাললৈ চিহ্ন (_L)" ++msgstr "LRM বাওঁ-ফালৰ-পৰা-সোঁ-ফাললৈ চিহ্ন" + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM সোঁ-ফালৰ-পৰা-বাওঁ ফাললৈ চিহ্ন (_R)" ++msgstr "RLM সোঁ-ফালৰ-পৰা-বাওঁ ফাললৈ চিহ্ন" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3345,11 +3345,11 @@ + + #: ../gtk/gtktextutil.c:63 + msgid "PDF _Pop directional formatting" +-msgstr "PDF প'প দিশত আকৃতি দিয়া (_P)" ++msgstr "PDF প'প দিশত আকৃতি দিয়া" + + #: ../gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS শুন্য বহলৰ স্থান (_Z)" ++msgstr "ZWS শুন্য বহলৰ স্থান" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +@@ -3479,7 +3479,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "সংৰক্ষণ কৰক (_S)" ++msgstr "সংৰক্ষণ কৰক" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -4925,7 +4925,7 @@ + + #: ../modules/printbackends/cups/gtkprintbackendcups.c:1345 + msgid "Domain:" +-msgstr "ডোমেইন (_D):" ++msgstr "ডোমেইন:" + + #: ../modules/printbackends/cups/gtkprintbackendcups.c:1375 + #, c-format +@@ -5249,7 +5249,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "নিৰ্গমৰ আকৃতি (_O)" ++msgstr "নিৰ্গমৰ আকৃতি" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5308,11 +5308,11 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "সকলো এপ্লিকেচন চাওক (_V)" ++msgstr "সকলো এপ্লিকেচন চাওক" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + msgid "_Find New Applications" +-msgstr "নতুন এপ্লিকেচনসমূহ সন্ধান কৰক (_F)" ++msgstr "নতুন এপ্লিকেচনসমূহ সন্ধান কৰক" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5346,15 +5346,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "পৰৱৰ্তী (_N)" ++msgstr "পৰৱৰ্তী" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "পূৰ্বৱৰ্তী (_B)" ++msgstr "পূৰ্বৱৰ্তী" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "সমাপ্ত কৰক (_F)" ++msgstr "সমাপ্ত কৰক" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5402,7 +5402,7 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "স্থান (_L):" ++msgstr "স্থান:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5441,16 +5441,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "কাৰণে আকৃতি দিয়ক (_F):" ++msgstr "কাৰণে আকৃতি দিয়ক:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "কাগজৰ আয়তন (_P):" ++msgstr "কাগজৰ আয়তন:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "দিক্‌বিন্যাস (_O):" ++msgstr "দিক্‌বিন্যাস:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5495,7 +5495,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "সকলো পাত (_A)" ++msgstr "সকলো পাত" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5537,7 +5537,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "প্ৰত্যাৱৰ্তন কৰক (_R)" ++msgstr "প্ৰত্যাৱৰ্তন কৰক" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5557,7 +5557,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "অকল মুদ্ৰণ কৰক (_O):" ++msgstr "অকল মুদ্ৰণ কৰক:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5605,7 +5605,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "সাধনীৰ তথ্য (_B):" ++msgstr "সাধনীৰ তথ্য:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5614,7 +5614,7 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "এতিয়া (_N)" ++msgstr "এতিয়া" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 +@@ -5660,7 +5660,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "পিছৰ (_A):" ++msgstr "পিছৰ:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5696,7 +5696,7 @@ + + #: ../gtk/resources/ui/gtkvolumebutton.ui.h:1 + msgid "Volume" +-msgstr "আয়তন (_V):" ++msgstr "আয়তন:" + + #: ../gtk/resources/ui/gtkvolumebutton.ui.h:2 + msgid "Turns volume up or down" +@@ -5799,7 +5799,7 @@ + #~ msgstr "স্থান" + + #~ msgid "_License" +-#~ msgstr "অনুজ্ঞা চুক্তি (_L)" ++#~ msgstr "অনুজ্ঞা চুক্তি" + + #~| msgid "Show other applications" + #~ msgid "Show Other Applications" +@@ -5825,10 +5825,10 @@ + #~ msgstr "অন আৰু অফ স্থিতিৰ মাজত অদল-বদল কৰে" + + #~ msgid "Input _Methods" +-#~ msgstr "নিবেশ পদ্ধতি (_M)" ++#~ msgstr "নিবেশ পদ্ধতি" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "Unicode নিয়ন্ত্ৰণ আকৰ ভৰাওক (_I)" ++#~ msgstr "Unicode নিয়ন্ত্ৰণ আকৰ ভৰাওক" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "ফাইলৰ বাবে তথ্য উদ্ধাৰ কৰিব পৰা ন'গ'ল" +@@ -5858,13 +5858,13 @@ + #~ msgstr "নিৰ্বাচিত পত্ৰচিহ্ন আঁতৰাই দিয়ক" + + #~ msgid "_Places" +-#~ msgstr "স্থান (_P)" ++#~ msgstr "স্থান" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "নিৰ্বাচিত ফোল্ডাৰ পত্ৰচিহ্নলৈ যোগ কৰক" + + #~ msgid "_Copy file’s location" +-#~ msgstr "ফাইলৰ অৱস্থান কপি কৰক (_C)" ++#~ msgstr "ফাইলৰ অৱস্থান কপি কৰক" + + #~ msgid "Save in _folder:" + #~ msgstr "ফোল্ডাৰত ৰক্ষা কৰক (_f):" +diff -urN a/po/bn.po b/po/bn.po +--- a/po/bn.po 2025-06-09 19:54:59.457434031 -0700 ++++ b/po/bn.po 2025-06-09 20:11:48.712736250 -0700 +@@ -490,7 +490,7 @@ + #. Add the license button + #: ../gtk/gtkaboutdialog.c:752 + msgid "_License" +-msgstr "লাইসেন্স (_L)" ++msgstr "লাইসেন্স" + + #: ../gtk/gtkaboutdialog.c:957 + msgid "Could not show link" +@@ -666,7 +666,7 @@ + #: ../gtk/gtkappchooserdialog.c:525 + #| msgid "_Selection: " + msgid "_Select" +-msgstr "নির্বাচন (_S)" ++msgstr "নির্বাচন" + + #: ../gtk/gtkappchooserwidget.c:591 + #| msgid "Application" +@@ -845,7 +845,7 @@ + + #: ../gtk/gtkcolorsel.c:451 + msgid "_Hue:" +-msgstr "হিউ: (_H)" ++msgstr "হিউ:" + + #: ../gtk/gtkcolorsel.c:452 + msgid "Position on the color wheel." +@@ -853,7 +853,7 @@ + + #: ../gtk/gtkcolorsel.c:454 + msgid "_Saturation:" +-msgstr "ঘনত্ব: (_S)" ++msgstr "ঘনত্ব:" + + #: ../gtk/gtkcolorsel.c:455 + msgid "Intensity of the color." +@@ -861,7 +861,7 @@ + + #: ../gtk/gtkcolorsel.c:456 + msgid "_Value:" +-msgstr "মান: (_V)" ++msgstr "মান:" + + #: ../gtk/gtkcolorsel.c:457 + msgid "Brightness of the color." +@@ -869,7 +869,7 @@ + + #: ../gtk/gtkcolorsel.c:458 + msgid "_Red:" +-msgstr "লাল: (_R)" ++msgstr "লাল:" + + #: ../gtk/gtkcolorsel.c:459 + msgid "Amount of red light in the color." +@@ -877,7 +877,7 @@ + + #: ../gtk/gtkcolorsel.c:460 + msgid "_Green:" +-msgstr "সবুজ: (_G)" ++msgstr "সবুজ:" + + #: ../gtk/gtkcolorsel.c:461 + msgid "Amount of green light in the color." +@@ -885,7 +885,7 @@ + + #: ../gtk/gtkcolorsel.c:462 + msgid "_Blue:" +-msgstr "নীল: (_B)" ++msgstr "নীল:" + + #: ../gtk/gtkcolorsel.c:463 + msgid "Amount of blue light in the color." +@@ -913,7 +913,7 @@ + + #: ../gtk/gtkcolorsel.c:536 + msgid "_Palette:" +-msgstr "প্যালেট: (_P)" ++msgstr "প্যালেট:" + + #: ../gtk/gtkcolorsel.c:565 + msgid "Color Wheel" +@@ -948,7 +948,7 @@ + + #: ../gtk/gtkcolorsel.c:1456 + msgid "_Save color here" +-msgstr "চিহ্নিত স্থানে রং সংরক্ষণ করুন (_S)" ++msgstr "চিহ্নিত স্থানে রং সংরক্ষণ করুন" + + #: ../gtk/gtkcolorsel.c:1661 + msgid "" +@@ -997,11 +997,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1057 + msgid "_Width:" +-msgstr "প্রস্থ: (_W)" ++msgstr "প্রস্থ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1069 + msgid "_Height:" +-msgstr "উচ্চতা: (_H)" ++msgstr "উচ্চতা:" + + #: ../gtk/gtkcustompaperunixdialog.c:1081 + msgid "Paper Size" +@@ -1009,19 +1009,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1090 + msgid "_Top:" +-msgstr "শীর্ষ: (_T)" ++msgstr "শীর্ষ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1102 + msgid "_Bottom:" +-msgstr "নিম্ন: (_B)" ++msgstr "নিম্ন:" + + #: ../gtk/gtkcustompaperunixdialog.c:1114 + msgid "_Left:" +-msgstr "বাম: (_L)" ++msgstr "বাম:" + + #: ../gtk/gtkcustompaperunixdialog.c:1126 + msgid "_Right:" +-msgstr "ডান: (_R)" ++msgstr "ডান:" + + #: ../gtk/gtkcustompaperunixdialog.c:1167 + msgid "Paper Margins" +@@ -1029,11 +1029,11 @@ + + #: ../gtk/gtkentry.c:8757 ../gtk/gtktextview.c:8272 + msgid "Input _Methods" +-msgstr "ইনপুট পদ্ধতি (_M)" ++msgstr "ইনপুট পদ্ধতি" + + #: ../gtk/gtkentry.c:8771 ../gtk/gtktextview.c:8286 + msgid "_Insert Unicode Control Character" +-msgstr "ইউনিকোডের কন্ট্রোল অক্ষর সন্নিবেশ (_I)" ++msgstr "ইউনিকোডের কন্ট্রোল অক্ষর সন্নিবেশ" + + #: ../gtk/gtkentry.c:10179 + msgid "Caps Lock and Num Lock are on" +@@ -1187,7 +1187,7 @@ + #. Column header for the file chooser's shortcuts pane + #: ../gtk/gtkfilechooserdefault.c:3710 + msgid "_Places" +-msgstr "অবস্থান (_P)" ++msgstr "অবস্থান" + + #: ../gtk/gtkfilechooserdefault.c:3789 + msgid "Add the selected folder to the Bookmarks" +@@ -1199,15 +1199,15 @@ + + #: ../gtk/gtkfilechooserdefault.c:4109 + msgid "_Add to Bookmarks" +-msgstr "বুকমার্ক তালিকায় যোগ (_A)" ++msgstr "বুকমার্ক তালিকায় যোগ" + + #: ../gtk/gtkfilechooserdefault.c:4122 + msgid "Show _Hidden Files" +-msgstr "লুকানো ফাইল প্রদর্শন (_H)" ++msgstr "লুকানো ফাইল প্রদর্শন" + + #: ../gtk/gtkfilechooserdefault.c:4129 + msgid "Show _Size Column" +-msgstr "আকার শীর্ষক কলাম প্রদর্শন (_S)" ++msgstr "আকার শীর্ষক কলাম প্রদর্শন" + + #: ../gtk/gtkfilechooserdefault.c:4354 + msgid "Files" +@@ -1228,12 +1228,12 @@ + #. Label + #: ../gtk/gtkfilechooserdefault.c:4697 ../gtk/gtkprinteroptionwidget.c:793 + msgid "_Name:" +-msgstr "নাম: (_N)" ++msgstr "নাম:" + + # FIXME + #: ../gtk/gtkfilechooserdefault.c:4740 + msgid "_Browse for other folders" +-msgstr "অন্যান্য ফোল্ডার অনুসন্ধানের জন্য ব্রাউজ করুন (_B)" ++msgstr "অন্যান্য ফোল্ডার অনুসন্ধানের জন্য ব্রাউজ করুন" + + #: ../gtk/gtkfilechooserdefault.c:5010 + msgid "Type a file name" +@@ -1246,7 +1246,7 @@ + + #: ../gtk/gtkfilechooserdefault.c:5063 + msgid "_Location:" +-msgstr "অবস্থান: (_L)" ++msgstr "অবস্থান:" + + #: ../gtk/gtkfilechooserdefault.c:5268 + msgid "Save in _folder:" +@@ -1309,7 +1309,7 @@ + + #: ../gtk/gtkfilechooserdefault.c:8104 ../gtk/gtkprintunixdialog.c:491 + msgid "_Replace" +-msgstr "প্রতিস্থাপন (_R)" ++msgstr "প্রতিস্থাপন" + + #: ../gtk/gtkfilechooserdefault.c:8830 + msgid "Could not start the search process" +@@ -1423,11 +1423,11 @@ + + #: ../gtk/gtkfontsel.c:366 + msgid "_Family:" +-msgstr "পরিবার: (_F)" ++msgstr "পরিবার:" + + #: ../gtk/gtkfontsel.c:372 + msgid "_Style:" +-msgstr "শৈলী: (_S)" ++msgstr "শৈলী:" + + #: ../gtk/gtkfontsel.c:378 + msgid "Si_ze:" +@@ -1436,7 +1436,7 @@ + #. create the text entry widget + #: ../gtk/gtkfontsel.c:554 + msgid "_Preview:" +-msgstr "প্রাকদর্শন: (_P)" ++msgstr "প্রাকদর্শন:" + + #: ../gtk/gtkfontsel.c:1653 + msgid "Font Selection" +@@ -1495,12 +1495,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6243 + msgid "_Open Link" +-msgstr "লিংক খুলুন (_O)" ++msgstr "লিংক খুলুন" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6255 + msgid "Copy _Link Address" +-msgstr "লিংকের ঠিকানা অনুলিপি করুন (_L)" ++msgstr "লিংকের ঠিকানা অনুলিপি করুন" + + #: ../gtk/gtklinkbutton.c:482 + msgid "Copy URL" +@@ -1571,15 +1571,15 @@ + + #: ../gtk/gtkmountoperation.c:605 + msgid "_Username:" +-msgstr "ব্যবহারকারীর নাম: (_U)" ++msgstr "ব্যবহারকারীর নাম:" + + #: ../gtk/gtkmountoperation.c:610 + msgid "_Domain:" +-msgstr "ডোমেইন: (_D)" ++msgstr "ডোমেইন:" + + #: ../gtk/gtkmountoperation.c:616 + msgid "_Password:" +-msgstr "পাসওয়ার্ড: (_P)" ++msgstr "পাসওয়ার্ড:" + + #: ../gtk/gtkmountoperation.c:634 + msgid "Forget password _immediately" +@@ -1604,7 +1604,7 @@ + + #: ../gtk/gtkmountoperation.c:1103 + msgid "_End Process" +-msgstr "প্রক্রিয়া সমাপ্ত (_E)" ++msgstr "প্রক্রিয়া সমাপ্ত" + + #: ../gtk/gtkmountoperation-stub.c:64 + #, c-format +@@ -1687,15 +1687,15 @@ + + #: ../gtk/gtkpagesetupunixdialog.c:907 + msgid "_Format for:" +-msgstr "বিন্যাস করা হবে: (_F)" ++msgstr "বিন্যাস করা হবে:" + + #: ../gtk/gtkpagesetupunixdialog.c:929 ../gtk/gtkprintunixdialog.c:3478 + msgid "_Paper size:" +-msgstr "পৃষ্ঠার আকার: (_P)" ++msgstr "পৃষ্ঠার আকার:" + + #: ../gtk/gtkpagesetupunixdialog.c:960 + msgid "_Orientation:" +-msgstr "স্থিতিবিন্যাস: (_O)" ++msgstr "স্থিতিবিন্যাস:" + + #: ../gtk/gtkpagesetupunixdialog.c:1024 ../gtk/gtkprintunixdialog.c:3540 + msgid "Page Setup" +@@ -1727,7 +1727,7 @@ + + #: ../gtk/gtkprinteroptionwidget.c:805 + msgid "_Save in folder:" +-msgstr "চিহ্নিত ফোল্ডারে সংরক্ষণ: (_S)" ++msgstr "চিহ্নিত ফোল্ডারে সংরক্ষণ:" + + #. translators: this string is the default job title for print + #. * jobs. %s gets replaced by the application name, %d gets replaced +@@ -1896,7 +1896,7 @@ + + #: ../gtk/gtkprintunixdialog.c:2198 + msgid "_All Pages" +-msgstr "সকল পৃষ্ঠা (_A)" ++msgstr "সকল পৃষ্ঠা" + + #: ../gtk/gtkprintunixdialog.c:2205 + msgid "C_urrent Page" +@@ -1937,7 +1937,7 @@ + + #: ../gtk/gtkprintunixdialog.c:2279 + msgid "_Reverse" +-msgstr "বিপরীত (_R)" ++msgstr "বিপরীত" + + #: ../gtk/gtkprintunixdialog.c:2299 + msgid "General" +@@ -2031,7 +2031,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3381 + msgid "_Only print:" +-msgstr "শুধুমাত্র মুদ্রণ করা হবে: (_O)" ++msgstr "শুধুমাত্র মুদ্রণ করা হবে:" + + #. In enum order + #: ../gtk/gtkprintunixdialog.c:3396 +@@ -2097,7 +2097,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3586 + msgid "_Billing info:" +-msgstr "বিল সংক্রান্ত তথ্য: (_B)" ++msgstr "বিল সংক্রান্ত তথ্য:" + + #: ../gtk/gtkprintunixdialog.c:3604 + msgid "Print Document" +@@ -2108,7 +2108,7 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3613 + msgid "_Now" +-msgstr "এই মুহূর্তে (_N)" ++msgstr "এই মুহূর্তে" + + #: ../gtk/gtkprintunixdialog.c:3624 + msgid "A_t:" +@@ -2154,7 +2154,7 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3704 + msgid "_After:" +-msgstr "পরে: (_A)" ++msgstr "পরে:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -2225,19 +2225,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1782 + msgid "Copy _Location" +-msgstr "অবস্থান অনুলিপি করুন (_L)" ++msgstr "অবস্থান অনুলিপি করুন" + + #: ../gtk/gtkrecentchooserdefault.c:1795 + msgid "_Remove From List" +-msgstr "তালিকা থেকে অপসারণ (_R)" ++msgstr "তালিকা থেকে অপসারণ" + + #: ../gtk/gtkrecentchooserdefault.c:1804 + msgid "_Clear List" +-msgstr "তালিকা মুছে ফেলুন (_C)" ++msgstr "তালিকা মুছে ফেলুন" + + #: ../gtk/gtkrecentchooserdefault.c:1818 + msgid "Show _Private Resources" +-msgstr "ব্যক্তিগত রিসোর্স প্রদর্শন করা হবে (_P)" ++msgstr "ব্যক্তিগত রিসোর্স প্রদর্শন করা হবে" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -2336,27 +2336,27 @@ + #: ../gtk/gtkstock.c:321 + msgctxt "Stock label" + msgid "_About" +-msgstr "পরিচিতি (_A)" ++msgstr "পরিচিতি" + + #: ../gtk/gtkstock.c:322 + msgctxt "Stock label" + msgid "_Add" +-msgstr "যোগ করুন (_A)" ++msgstr "যোগ করুন" + + #: ../gtk/gtkstock.c:323 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "প্রয়োগ করুন (_A)" ++msgstr "প্রয়োগ করুন" + + #: ../gtk/gtkstock.c:324 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "গাঢ় (_B)" ++msgstr "গাঢ়" + + #: ../gtk/gtkstock.c:325 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "বাতিল (_C)" ++msgstr "বাতিল" + + #: ../gtk/gtkstock.c:326 + msgctxt "Stock label" +@@ -2366,12 +2366,12 @@ + #: ../gtk/gtkstock.c:327 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "মুছে ফেলুন (_C)" ++msgstr "মুছে ফেলুন" + + #: ../gtk/gtkstock.c:328 + msgctxt "Stock label" + msgid "_Close" +-msgstr "বন্ধ (_C)" ++msgstr "বন্ধ" + + #: ../gtk/gtkstock.c:329 + msgctxt "Stock label" +@@ -2381,12 +2381,12 @@ + #: ../gtk/gtkstock.c:330 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "রূপান্তর করুন (_C)" ++msgstr "রূপান্তর করুন" + + #: ../gtk/gtkstock.c:331 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "অনুলিপি করুন (_C)" ++msgstr "অনুলিপি করুন" + + #: ../gtk/gtkstock.c:332 + msgctxt "Stock label" +@@ -2396,120 +2396,120 @@ + #: ../gtk/gtkstock.c:333 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "মুছে ফেলুন (_D)" ++msgstr "মুছে ফেলুন" + + #: ../gtk/gtkstock.c:334 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "বাতিল করুন (_D)" ++msgstr "বাতিল করুন" + + #: ../gtk/gtkstock.c:335 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "সংযোগ বিচ্ছিন্ন করুন (_D)" ++msgstr "সংযোগ বিচ্ছিন্ন করুন" + + #: ../gtk/gtkstock.c:336 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "সঞ্চালন করুন (_E)" ++msgstr "সঞ্চালন করুন" + + #: ../gtk/gtkstock.c:337 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "সম্পাদনা (_E)" ++msgstr "সম্পাদনা" + + #: ../gtk/gtkstock.c:338 + msgctxt "Stock label" + msgid "_File" +-msgstr "ফাইল (_F)" ++msgstr "ফাইল" + + #: ../gtk/gtkstock.c:339 + msgctxt "Stock label" + msgid "_Find" +-msgstr "খুঁজুন (_F)" ++msgstr "খুঁজুন" + + #: ../gtk/gtkstock.c:340 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "অনুসন্ধান ও প্রতিস্থাপন (_R)" ++msgstr "অনুসন্ধান ও প্রতিস্থাপন" + + #: ../gtk/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ফ্লপি (_F)" ++msgstr "ফ্লপি" + + #: ../gtk/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "পর্দা জুড়ে প্রদর্শন (_F)" ++msgstr "পর্দা জুড়ে প্রদর্শন" + + #: ../gtk/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "পর্দা জুড়ে প্রদর্শন বন্ধ (_L)" ++msgstr "পর্দা জুড়ে প্রদর্শন বন্ধ" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/gtkstock.c:345 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "নীচে (_B)" ++msgstr "নীচে" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/gtkstock.c:347 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "প্রথম (_F)" ++msgstr "প্রথম" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/gtkstock.c:349 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "সর্বশেষ (_L)" ++msgstr "সর্বশেষ" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/gtkstock.c:351 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "শীর্ষে (_T)" ++msgstr "শীর্ষে" + + #. This is a navigation label as in "go back" + #: ../gtk/gtkstock.c:353 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "পূর্ববর্তী (_B)" ++msgstr "পূর্ববর্তী" + + #. This is a navigation label as in "go down" + #: ../gtk/gtkstock.c:355 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "নীচে (_D)" ++msgstr "নীচে" + + #. This is a navigation label as in "go forward" + #: ../gtk/gtkstock.c:357 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "এগিয়ে চলুন (_F)" ++msgstr "এগিয়ে চলুন" + + #. This is a navigation label as in "go up" + #: ../gtk/gtkstock.c:359 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "উপরে (_U)" ++msgstr "উপরে" + + #: ../gtk/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "হার্ড-ডিস্ক (_H)" ++msgstr "হার্ড-ডিস্ক" + + #: ../gtk/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Help" +-msgstr "সহায়তা (_H)" ++msgstr "সহায়তা" + + #: ../gtk/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Home" +-msgstr "হোম (_H)" ++msgstr "হোম" + + #: ../gtk/gtkstock.c:363 + msgctxt "Stock label" +@@ -2524,58 +2524,58 @@ + #: ../gtk/gtkstock.c:365 + msgctxt "Stock label" + msgid "_Index" +-msgstr "সূচিপত্র (_I)" ++msgstr "সূচিপত্র" + + #: ../gtk/gtkstock.c:366 + msgctxt "Stock label" + msgid "_Information" +-msgstr "তথ্য (_I)" ++msgstr "তথ্য" + + #: ../gtk/gtkstock.c:367 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "তির্যক (_I)" ++msgstr "তির্যক" + + #: ../gtk/gtkstock.c:368 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "চিহ্নিত স্থানে যান (_J)" ++msgstr "চিহ্নিত স্থানে যান" + + #. This is about text justification, "centered text" + #: ../gtk/gtkstock.c:370 + msgctxt "Stock label" + msgid "_Center" +-msgstr "কেন্দ্র (_C)" ++msgstr "কেন্দ্র" + + #. This is about text justification + #: ../gtk/gtkstock.c:372 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ভরাট (_F)" ++msgstr "ভরাট" + + #. This is about text justification, "left-justified text" + #: ../gtk/gtkstock.c:374 + msgctxt "Stock label" + msgid "_Left" +-msgstr "বাম (_L)" ++msgstr "বাম" + + #. This is about text justification, "right-justified text" + #: ../gtk/gtkstock.c:376 + msgctxt "Stock label" + msgid "_Right" +-msgstr "ডান (_R)" ++msgstr "ডান" + + #. Media label, as in "fast forward" + #: ../gtk/gtkstock.c:379 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "এগিয়ে চলুন (_F)" ++msgstr "এগিয়ে চলুন" + + #. Media label, as in "next song" + #: ../gtk/gtkstock.c:381 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "পরবর্তী (_N)" ++msgstr "পরবর্তী" + + #. Media label, as in "pause music" + #: ../gtk/gtkstock.c:383 +@@ -2587,7 +2587,7 @@ + #: ../gtk/gtkstock.c:385 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "বাজানো হবে (_P)" ++msgstr "বাজানো হবে" + + #. Media label, as in "previous song" + #: ../gtk/gtkstock.c:387 +@@ -2600,7 +2600,7 @@ + #: ../gtk/gtkstock.c:389 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "রেকর্ড করা হবে (_R)" ++msgstr "রেকর্ড করা হবে" + + #. Media label + #: ../gtk/gtkstock.c:391 +@@ -2612,32 +2612,32 @@ + #: ../gtk/gtkstock.c:393 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "থামান (_S)" ++msgstr "থামান" + + #: ../gtk/gtkstock.c:394 + msgctxt "Stock label" + msgid "_Network" +-msgstr "নেটওয়ার্ক (_N)" ++msgstr "নেটওয়ার্ক" + + #: ../gtk/gtkstock.c:395 + msgctxt "Stock label" + msgid "_New" +-msgstr "নতুন (_N)" ++msgstr "নতুন" + + #: ../gtk/gtkstock.c:396 + msgctxt "Stock label" + msgid "_No" +-msgstr "না (_N)" ++msgstr "না" + + #: ../gtk/gtkstock.c:397 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ঠিক আছে (_O)" ++msgstr "ঠিক আছে" + + #: ../gtk/gtkstock.c:398 + msgctxt "Stock label" + msgid "_Open" +-msgstr "খুলুন (_O)" ++msgstr "খুলুন" + + #. Page orientation + #: ../gtk/gtkstock.c:400 +@@ -2671,17 +2671,17 @@ + #: ../gtk/gtkstock.c:408 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "প্রতিলেপন (_P)" ++msgstr "প্রতিলেপন" + + #: ../gtk/gtkstock.c:409 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "পছন্দসমূহ (_P)" ++msgstr "পছন্দসমূহ" + + #: ../gtk/gtkstock.c:410 + msgctxt "Stock label" + msgid "_Print" +-msgstr "মুদ্রণ (_P)" ++msgstr "মুদ্রণ" + + #: ../gtk/gtkstock.c:411 + msgctxt "Stock label" +@@ -2691,128 +2691,128 @@ + #: ../gtk/gtkstock.c:412 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "বৈশিষ্ট্যাবলী (_P)" ++msgstr "বৈশিষ্ট্যাবলী" + + #: ../gtk/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "প্রস্থান (_Q)" ++msgstr "প্রস্থান" + + #: ../gtk/gtkstock.c:414 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "পুনরাবৃত্তি (_R)" ++msgstr "পুনরাবৃত্তি" + + #: ../gtk/gtkstock.c:415 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "রিফ্রেশ করুন (_R)" ++msgstr "রিফ্রেশ করুন" + + #: ../gtk/gtkstock.c:416 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "অপসারণ (_R)" ++msgstr "অপসারণ" + + #: ../gtk/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "পূর্বাবস্থায় প্রত্যাবর্তন (_R)" ++msgstr "পূর্বাবস্থায় প্রত্যাবর্তন" + + #: ../gtk/gtkstock.c:418 + msgctxt "Stock label" + msgid "_Save" +-msgstr "সংরক্ষণ (_S)" ++msgstr "সংরক্ষণ" + + #: ../gtk/gtkstock.c:419 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "নতুনভাবে সংরক্ষণ (_A)" ++msgstr "নতুনভাবে সংরক্ষণ" + + #: ../gtk/gtkstock.c:420 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "সব নির্বাচন করুন (_A)" ++msgstr "সব নির্বাচন করুন" + + #: ../gtk/gtkstock.c:421 + msgctxt "Stock label" + msgid "_Color" +-msgstr "রং (_C)" ++msgstr "রং" + + #: ../gtk/gtkstock.c:422 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ফন্ট (_F)" ++msgstr "ফন্ট" + + #. Sorting direction + #: ../gtk/gtkstock.c:424 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "আরোহী (_A)" ++msgstr "আরোহী" + + #. Sorting direction + #: ../gtk/gtkstock.c:426 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "অবরোহী (_D)" ++msgstr "অবরোহী" + + #: ../gtk/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "বানান-পরীক্ষণ (_S)" ++msgstr "বানান-পরীক্ষণ" + + #: ../gtk/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "থামান (_S)" ++msgstr "থামান" + + #. Font variant + #: ../gtk/gtkstock.c:430 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "মধ্যরেখাঙ্কন (_S)" ++msgstr "মধ্যরেখাঙ্কন" + + #: ../gtk/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "পুনরুদ্ধার (_U)" ++msgstr "পুনরুদ্ধার" + + #. Font variant + #: ../gtk/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "নিম্নরেখাঙ্কন (_U)" ++msgstr "নিম্নরেখাঙ্কন" + + #: ../gtk/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "পূর্বাবস্থা (_U)" ++msgstr "পূর্বাবস্থা" + + #: ../gtk/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "হ্যাঁ (_Y)" ++msgstr "হ্যাঁ" + + #. Zoom + #: ../gtk/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "স্বাভাবিক আকার (_N)" ++msgstr "স্বাভাবিক আকার" + + #. Zoom + #: ../gtk/gtkstock.c:439 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "সর্বোত্তম মানানসই (_F)" ++msgstr "সর্বোত্তম মানানসই" + + #: ../gtk/gtkstock.c:440 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "বড় আকারে প্রদর্শন (_I)" ++msgstr "বড় আকারে প্রদর্শন" + + #: ../gtk/gtkstock.c:441 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ছোট আকারে প্রদর্শন (_O)" ++msgstr "ছোট আকারে প্রদর্শন" + + #. Translators: if the "on" state label requires more than three + #. * glyphs then use MEDIUM VERTICAL BAR (U+2759) as the text for +@@ -2959,11 +2959,11 @@ + + #: ../gtk/gtktextutil.c:60 + msgid "LRM _Left-to-right mark" +-msgstr "LRM বাম-থেকে-ডানে চিহ্ন (_L)" ++msgstr "LRM বাম-থেকে-ডানে চিহ্ন" + + #: ../gtk/gtktextutil.c:61 + msgid "RLM _Right-to-left mark" +-msgstr "RLM ডান-থেকে-বামে চিহ্ন (_R)" ++msgstr "RLM ডান-থেকে-বামে চিহ্ন" + + #: ../gtk/gtktextutil.c:62 + msgid "LRE Left-to-right _embedding" +@@ -2983,11 +2983,11 @@ + + #: ../gtk/gtktextutil.c:66 + msgid "PDF _Pop directional formatting" +-msgstr "PDF পপ দিকবিন্যাস (_P)" ++msgstr "PDF পপ দিকবিন্যাস" + + #: ../gtk/gtktextutil.c:67 + msgid "ZWS _Zero width space" +-msgstr "ZWS শূণ্য প্রস্থের ফাঁকাস্থান (_Z)" ++msgstr "ZWS শূণ্য প্রস্থের ফাঁকাস্থান" + + #: ../gtk/gtktextutil.c:68 + msgid "ZWJ Zero width _joiner" +@@ -4419,7 +4419,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:709 + msgid "_Output format" +-msgstr "আউটপুটের ফরম্যাট (_O)" ++msgstr "আউটপুটের ফরম্যাট" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:395 + msgid "Print to LPR" +@@ -4501,10 +4501,10 @@ + #~ msgstr "লেখক" + + #~ msgid "_Add" +-#~ msgstr "যোগ করুন (_A)" ++#~ msgstr "যোগ করুন" + + #~ msgid "_Remove" +-#~ msgstr "অপসারণ (_R)" ++#~ msgstr "অপসারণ" + + #~ msgid "Error creating folder '%s': %s" + #~ msgstr "'%1$s' ফোল্ডার তৈরিতে ত্রুটি: %2$s" +@@ -5192,13 +5192,13 @@ + #~ "আপনি কি নিশ্চিত আপনি এটা নির্বাচন করতে চান?" + + #~ msgid "_New Folder" +-#~ msgstr "নতুন ফোল্ডার (_N)" ++#~ msgstr "নতুন ফোল্ডার" + + #~ msgid "De_lete File" + #~ msgstr "ফাইল মুছে ফেলুন (_l)" + + #~ msgid "_Rename File" +-#~ msgstr "ফাইলটি পুনরায় নামকরণ করুন (_R)" ++#~ msgstr "ফাইলটি পুনরায় নামকরণ করুন" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -5210,7 +5210,7 @@ + #~ msgstr "নতুন ফোল্ডার" + + #~ msgid "_Folder name:" +-#~ msgstr "ফোল্ডারের নাম: (_F)" ++#~ msgstr "ফোল্ডারের নাম:" + + #~ msgid "" + #~ "The filename \"%s\" contains symbols that are not allowed in filenames" +@@ -5242,7 +5242,7 @@ + #~ msgstr "\"%s\" ফাইলটি চিহ্নিত নামে পুনঃনামকরণ করুন:" + + #~ msgid "_Rename" +-#~ msgstr "পুনরায় নামকরণ করুন (_R)" ++#~ msgstr "পুনরায় নামকরণ করুন" + + #~ msgid "" + #~ "The filename \"%s\" couldn't be converted to UTF-8. (try setting the " +@@ -5264,7 +5264,7 @@ + #~ msgstr "গামা" + + #~ msgid "_Gamma value" +-#~ msgstr "গামার মান (_G)" ++#~ msgstr "গামার মান" + + #~ msgid "Input" + #~ msgstr "ইনপুট" +@@ -5273,7 +5273,7 @@ + #~ msgstr "অতিরিক্ত ইনপুট ডিভাইস বিদ্যমান নেই" + + #~ msgid "_Device:" +-#~ msgstr "ডিভাইস: (_D)" ++#~ msgstr "ডিভাইস:" + + #~ msgid "Disabled" + #~ msgstr "নিষ্ক্রিয়" +@@ -5285,7 +5285,7 @@ + #~ msgstr "উইন্ডো" + + #~ msgid "_Mode:" +-#~ msgstr "মোড: (_M)" ++#~ msgstr "মোড:" + + #~ msgid "Axes" + #~ msgstr "অক্ষ" +@@ -5294,13 +5294,13 @@ + #~ msgstr "কী" + + #~ msgid "_X:" +-#~ msgstr "X: (_X)" ++#~ msgstr "X:" + + #~ msgid "_Y:" +-#~ msgstr "Y: (_Y)" ++#~ msgstr "Y:" + + #~ msgid "_Pressure:" +-#~ msgstr "চাপ: (_P)" ++#~ msgstr "চাপ:" + + # FIXME + #~ msgid "X _tilt:" +@@ -5311,7 +5311,7 @@ + #~ msgstr "Y tilt: (_i)" + + #~ msgid "_Wheel:" +-#~ msgstr "চাকা: (_W)" ++#~ msgstr "চাকা:" + + #~ msgid "none" + #~ msgstr "কোনটি না" +@@ -5333,7 +5333,7 @@ + + #, fuzzy + #~ msgid "_Search:" +-#~ msgstr "অনুসন্ধান: (_S)" ++#~ msgstr "অনুসন্ধান:" + + #, fuzzy + #~ msgid "Recently Used" +diff -urN a/po/bn_IN.po b/po/bn_IN.po +--- a/po/bn_IN.po 2025-06-09 19:54:59.457434031 -0700 ++++ b/po/bn_IN.po 2025-06-09 20:11:48.720736354 -0700 +@@ -626,7 +626,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "হিউ: (_H)" ++msgstr "হিউ:" + + #: ../gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -642,7 +642,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "মান:(_V)" ++msgstr "মান:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -650,7 +650,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "লাল:(_R)" ++msgstr "লাল:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -658,7 +658,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "সবুজ: (_G)" ++msgstr "সবুজ:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -666,7 +666,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "নীল: (_B)" ++msgstr "নীল:" + + #: ../gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -695,7 +695,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "প্যালেট: (_P)" ++msgstr "প্যালেট:" + + #: ../gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -733,7 +733,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1491 + msgid "_Save color here" +-msgstr "চিহ্নিত স্থানে রং সংরক্ষণ করুন (_S)" ++msgstr "চিহ্নিত স্থানে রং সংরক্ষণ করুন" + + #: ../gtk/deprecated/gtkcolorsel.c:1695 + msgid "" +@@ -752,7 +752,7 @@ + #: ../gtk/gtkfontchooserdialog.c:174 + #: ../gtk/gtkprinteroptionwidget.c:552 + msgid "_Select" +-msgstr "নির্বাচন করুন (_S)" ++msgstr "নির্বাচন করুন" + + #: ../gtk/deprecated/gtkcolorseldialog.c:219 + msgid "Color Selection" +@@ -766,11 +766,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Family:" +-msgstr "সংকলন: (_F)" ++msgstr "সংকলন:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "_Style:" +-msgstr "বিন্যাস:(_S)" ++msgstr "বিন্যাস:" + + #: ../gtk/deprecated/gtkfontsel.c:407 + msgid "Si_ze:" +@@ -779,7 +779,7 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:584 + msgid "_Preview:" +-msgstr "পূর্বপ্রদর্শন:(_P)" ++msgstr "পূর্বপ্রদর্শন:" + + #: ../gtk/deprecated/gtkfontsel.c:1720 + #: ../gtk/gtkfontchooserdialog.c:183 +@@ -813,7 +813,7 @@ + #. Add the license button + #: ../gtk/gtkaboutdialog.c:764 + msgid "_License" +-msgstr "লাইসেন্স (_L)" ++msgstr "লাইসেন্স" + + #: ../gtk/gtkaboutdialog.c:980 + msgid "Could not show link" +@@ -918,7 +918,7 @@ + + #: ../gtk/gtkappchooserdialog.c:188 + msgid "_Find applications online" +-msgstr "অনলাইন অ্যাপ্লিকেশন অনুসন্ধান করুন (_F)" ++msgstr "অনলাইন অ্যাপ্লিকেশন অনুসন্ধান করুন" + + #. Translators: %s is a filename + #: ../gtk/gtkappchooserdialog.c:332 +@@ -997,11 +997,11 @@ + + #: ../gtk/gtkassistant.c:1011 + msgid "Go _Back" +-msgstr "পূর্ববর্তী (_B)" ++msgstr "পূর্ববর্তী" + + #: ../gtk/gtkassistant.c:1015 + msgid "_Finish" +-msgstr "সমাপ্তি (_F)" ++msgstr "সমাপ্তি" + + #: ../gtk/gtkbuilder-menus.c:220 + #, c-format +@@ -1415,7 +1415,7 @@ + + #: ../gtk/gtkcolorswatch.c:447 + msgid "_Customize" +-msgstr "স্বনির্ধারিত (_C)" ++msgstr "স্বনির্ধারিত" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -1453,11 +1453,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1109 + msgid "_Width:" +-msgstr "প্রস্থ:(_W)" ++msgstr "প্রস্থ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Height:" +-msgstr "উচ্চতা:(_H)" ++msgstr "উচ্চতা:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "Paper Size" +@@ -1465,19 +1465,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1140 + msgid "_Top:" +-msgstr "উপরে:(_T)" ++msgstr "উপরে:" + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Bottom:" +-msgstr "নীচে:(_B)" ++msgstr "নীচে:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Left:" +-msgstr "বাঁদিকে:(_L)" ++msgstr "বাঁদিকে:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Right:" +-msgstr "ডানদিকে:(_R)" ++msgstr "ডানদিকে:" + + #: ../gtk/gtkcustompaperunixdialog.c:1212 + msgid "Paper Margins" +@@ -1486,12 +1486,12 @@ + #: ../gtk/gtkentry.c:9205 + #: ../gtk/gtktextview.c:8685 + msgid "Input _Methods" +-msgstr "ইনপুট পদ্ধতি (_M)" ++msgstr "ইনপুট পদ্ধতি" + + #: ../gtk/gtkentry.c:9219 + #: ../gtk/gtktextview.c:8699 + msgid "_Insert Unicode Control Character" +-msgstr "ইউনিকোডের কন্ট্রোল অক্ষর সন্নিবেশ করুন (_I)" ++msgstr "ইউনিকোডের কন্ট্রোল অক্ষর সন্নিবেশ করুন" + + #: ../gtk/gtkentry.c:10317 + msgid "Caps Lock is on" +@@ -1674,7 +1674,7 @@ + #. Column header for the file chooser's shortcuts pane + #: ../gtk/gtkfilechooserdefault.c:3615 + msgid "_Places" +-msgstr "অবস্থান (_P)" ++msgstr "অবস্থান" + + #: ../gtk/gtkfilechooserdefault.c:3695 + msgid "Add the selected folder to the Bookmarks" +@@ -1686,23 +1686,23 @@ + + #: ../gtk/gtkfilechooserdefault.c:4185 + msgid "_Visit this file" +-msgstr "চিহ্নিত ফাইল পরিদর্শন করুন (_V)" ++msgstr "চিহ্নিত ফাইল পরিদর্শন করুন" + + #: ../gtk/gtkfilechooserdefault.c:4188 + msgid "_Copy file’s location" +-msgstr "ফাইলের অবস্থান কপি করুন (_C)" ++msgstr "ফাইলের অবস্থান কপি করুন" + + #: ../gtk/gtkfilechooserdefault.c:4191 + msgid "_Add to Bookmarks" +-msgstr "বুকমার্ক তালিকায় যোগ করুন(_A)" ++msgstr "বুকমার্ক তালিকায় যোগ করুন" + + #: ../gtk/gtkfilechooserdefault.c:4198 + msgid "Show _Hidden Files" +-msgstr "লুকোনো ফাইল প্রদর্শন করা হবে (_H)" ++msgstr "লুকোনো ফাইল প্রদর্শন করা হবে" + + #: ../gtk/gtkfilechooserdefault.c:4201 + msgid "Show _Size Column" +-msgstr "মাপ শীর্ষক কলাম প্রদর্শিত হবে (_S)" ++msgstr "মাপ শীর্ষক কলাম প্রদর্শিত হবে" + + #: ../gtk/gtkfilechooserdefault.c:4426 + msgid "Files" +@@ -1723,7 +1723,7 @@ + #. Label + #: ../gtk/gtkfilechooserdefault.c:4607 + msgid "_Name:" +-msgstr "নাম:(_N)" ++msgstr "নাম:" + + #: ../gtk/gtkfilechooserdefault.c:4838 + msgid "Type a file name" +@@ -1749,7 +1749,7 @@ + + #: ../gtk/gtkfilechooserdefault.c:5061 + msgid "_Location:" +-msgstr "অবস্থান :(_L)" ++msgstr "অবস্থান :" + + #: ../gtk/gtkfilechooserdefault.c:5511 + msgid "Save in _folder:" +@@ -1817,7 +1817,7 @@ + #: ../gtk/gtkfilechooserdefault.c:8313 + #: ../gtk/gtkprintunixdialog.c:559 + msgid "_Replace" +-msgstr "প্রতিস্থাপন (_R)" ++msgstr "প্রতিস্থাপন" + + #: ../gtk/gtkfilechooserdefault.c:9120 + msgid "Could not start the search process" +@@ -1908,12 +1908,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6167 + msgid "_Open Link" +-msgstr "লিংক খুলুন (_O)" ++msgstr "লিংক খুলুন" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6179 + msgid "Copy _Link Address" +-msgstr "লিংকের ঠিকানা কপি করুন (_L)" ++msgstr "লিংকের ঠিকানা কপি করুন" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2058,7 +2058,7 @@ + + #: ../gtk/gtkmountoperation.c:618 + msgid "_Anonymous" +-msgstr "পরিচয়বিহীন (_A)" ++msgstr "পরিচয়বিহীন" + + #: ../gtk/gtkmountoperation.c:627 + msgid "Registered U_ser" +@@ -2066,15 +2066,15 @@ + + #: ../gtk/gtkmountoperation.c:638 + msgid "_Username" +-msgstr "ব্যবহারকারীর নাম (_U)" ++msgstr "ব্যবহারকারীর নাম" + + #: ../gtk/gtkmountoperation.c:643 + msgid "_Domain" +-msgstr "ডোমেইন (_D)" ++msgstr "ডোমেইন" + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Password" +-msgstr "পাসওয়ার্ড (_P)" ++msgstr "পাসওয়ার্ড" + + #: ../gtk/gtkmountoperation.c:671 + msgid "Forget password _immediately" +@@ -2099,7 +2099,7 @@ + + #: ../gtk/gtkmountoperation.c:1300 + msgid "_End Process" +-msgstr "প্রসেস সমাপ্তি (_E)" ++msgstr "প্রসেস সমাপ্তি" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2181,16 +2181,16 @@ + + #: ../gtk/gtkpagesetupunixdialog.c:896 + msgid "_Format for:" +-msgstr "বিন্যাস করা হবে: (_F)" ++msgstr "বিন্যাস করা হবে:" + + #: ../gtk/gtkpagesetupunixdialog.c:917 + #: ../gtk/gtkprintunixdialog.c:3477 + msgid "_Paper size:" +-msgstr "কাগজের মাপ:(_P)" ++msgstr "কাগজের মাপ:" + + #: ../gtk/gtkpagesetupunixdialog.c:946 + msgid "_Orientation:" +-msgstr "দিশা:(_O)" ++msgstr "দিশা:" + + #: ../gtk/gtkpagesetupunixdialog.c:1006 + #: ../gtk/gtkprintunixdialog.c:3531 +@@ -2387,7 +2387,7 @@ + + #: ../gtk/gtkprintunixdialog.c:2235 + msgid "_All Pages" +-msgstr "সমস্ত পাতা (_A)" ++msgstr "সমস্ত পাতা" + + #: ../gtk/gtkprintunixdialog.c:2240 + msgid "C_urrent Page" +@@ -2426,7 +2426,7 @@ + + #: ../gtk/gtkprintunixdialog.c:2302 + msgid "_Reverse" +-msgstr "বিপরীত দিশা (_R)" ++msgstr "বিপরীত দিশা" + + #: ../gtk/gtkprintunixdialog.c:2318 + msgid "General" +@@ -2518,7 +2518,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3395 + msgid "_Only print:" +-msgstr "শুধুমাত্র প্রিন্ট করা হবে:(_O)" ++msgstr "শুধুমাত্র প্রিন্ট করা হবে:" + + #. In enum order + #: ../gtk/gtkprintunixdialog.c:3407 +@@ -2584,7 +2584,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3572 + msgid "_Billing info:" +-msgstr "বিল সংক্রান্ত তথ্য: (_B)" ++msgstr "বিল সংক্রান্ত তথ্য:" + + #: ../gtk/gtkprintunixdialog.c:3587 + msgid "Print Document" +@@ -2594,7 +2594,7 @@ + #. * in the print dialog + #: ../gtk/gtkprintunixdialog.c:3594 + msgid "_Now" +-msgstr "এই মুহূর্তে(_N)" ++msgstr "এই মুহূর্তে" + + #: ../gtk/gtkprintunixdialog.c:3603 + msgid "A_t:" +@@ -2637,7 +2637,7 @@ + #. * dialog that controls the back cover page. + #: ../gtk/gtkprintunixdialog.c:3672 + msgid "_After:" +-msgstr "চিহ্নিত পৃষ্ঠার পরে:(_A)" ++msgstr "চিহ্নিত পৃষ্ঠার পরে:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -2697,19 +2697,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1774 + msgid "Copy _Location" +-msgstr "অবস্থান কপি করুন (_L)" ++msgstr "অবস্থান কপি করুন" + + #: ../gtk/gtkrecentchooserdefault.c:1787 + msgid "_Remove From List" +-msgstr "তালিকা থেকে মুছে ফেলুন (_R)" ++msgstr "তালিকা থেকে মুছে ফেলুন" + + #: ../gtk/gtkrecentchooserdefault.c:1796 + msgid "_Clear List" +-msgstr "তালিকা পরিশ্রুত করুন (_C)" ++msgstr "তালিকা পরিশ্রুত করুন" + + #: ../gtk/gtkrecentchooserdefault.c:1810 + msgid "Show _Private Resources" +-msgstr "ব্যক্তিগত রিসোর্স প্রদর্শন করা হবে (_P)" ++msgstr "ব্যক্তিগত রিসোর্স প্রদর্শন করা হবে" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -2800,27 +2800,27 @@ + #: ../gtk/gtkstock.c:332 + msgctxt "Stock label" + msgid "_About" +-msgstr "পরিচিতি (_A)" ++msgstr "পরিচিতি" + + #: ../gtk/gtkstock.c:333 + msgctxt "Stock label" + msgid "_Add" +-msgstr "যোগ করুন (_A)" ++msgstr "যোগ করুন" + + #: ../gtk/gtkstock.c:334 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "প্রয়োগ করুন (_A)" ++msgstr "প্রয়োগ করুন" + + #: ../gtk/gtkstock.c:335 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "উজ্জ্বল (_B)" ++msgstr "উজ্জ্বল" + + #: ../gtk/gtkstock.c:336 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "বাতিল (_C)" ++msgstr "বাতিল" + + #: ../gtk/gtkstock.c:337 + msgctxt "Stock label" +@@ -2830,12 +2830,12 @@ + #: ../gtk/gtkstock.c:338 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "পরিশ্রুত করুন (_C)" ++msgstr "পরিশ্রুত করুন" + + #: ../gtk/gtkstock.c:339 + msgctxt "Stock label" + msgid "_Close" +-msgstr "বন্ধ করুন (_C)" ++msgstr "বন্ধ করুন" + + #: ../gtk/gtkstock.c:340 + msgctxt "Stock label" +@@ -2845,12 +2845,12 @@ + #: ../gtk/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "রূপান্তর করুন (_C)" ++msgstr "রূপান্তর করুন" + + #: ../gtk/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "কপি করুন (_C)" ++msgstr "কপি করুন" + + #: ../gtk/gtkstock.c:343 + msgctxt "Stock label" +@@ -2860,120 +2860,120 @@ + #: ../gtk/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "মুছে ফেলুন (_D)" ++msgstr "মুছে ফেলুন" + + #: ../gtk/gtkstock.c:345 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "বর্জন করুন (_D)" ++msgstr "বর্জন করুন" + + #: ../gtk/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "সংযোগ বিচ্ছিন্ন করুন (_D)" ++msgstr "সংযোগ বিচ্ছিন্ন করুন" + + #: ../gtk/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "সঞ্চালন করুন (_E)" ++msgstr "সঞ্চালন করুন" + + #: ../gtk/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "সম্পাদনা (_E)" ++msgstr "সম্পাদনা" + + #: ../gtk/gtkstock.c:349 + msgctxt "Stock label" + msgid "_File" +-msgstr "ফাইল (_F)" ++msgstr "ফাইল" + + #: ../gtk/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Find" +-msgstr "অনুসন্ধান (_F)" ++msgstr "অনুসন্ধান" + + #: ../gtk/gtkstock.c:351 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "অনুসন্ধান ও প্রতিস্থাপন (_R)" ++msgstr "অনুসন্ধান ও প্রতিস্থাপন" + + #: ../gtk/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ফ্লপি (_F)" ++msgstr "ফ্লপি" + + #: ../gtk/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "সম্পূর্ণ পর্দাজুড়ে প্রদর্শন (_F)" ++msgstr "সম্পূর্ণ পর্দাজুড়ে প্রদর্শন" + + #: ../gtk/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "সম্পূর্ণ পর্দায় প্রদর্শন বন্ধ করা হবে (_L)" ++msgstr "সম্পূর্ণ পর্দায় প্রদর্শন বন্ধ করা হবে" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/gtkstock.c:356 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "নীচে (_B)" ++msgstr "নীচে" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/gtkstock.c:358 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "প্রথম (_F)" ++msgstr "প্রথম" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/gtkstock.c:360 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "সর্বশেষ (_L)" ++msgstr "সর্বশেষ" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/gtkstock.c:362 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "উপরে (_T)" ++msgstr "উপরে" + + #. This is a navigation label as in "go back" + #: ../gtk/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "পূর্ববর্তী (_B)" ++msgstr "পূর্ববর্তী" + + #. This is a navigation label as in "go down" + #: ../gtk/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "নীচে (_D)" ++msgstr "নীচে" + + #. This is a navigation label as in "go forward" + #: ../gtk/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "এগিয়ে চলুন (_F)" ++msgstr "এগিয়ে চলুন" + + #. This is a navigation label as in "go up" + #: ../gtk/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "উপরে (_U)" ++msgstr "উপরে" + + #: ../gtk/gtkstock.c:371 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "হার্ড-ডিস্ক (_H)" ++msgstr "হার্ড-ডিস্ক" + + #: ../gtk/gtkstock.c:372 + msgctxt "Stock label" + msgid "_Help" +-msgstr "সাহায্য (_H)" ++msgstr "সাহায্য" + + #: ../gtk/gtkstock.c:373 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ব্যক্তিগত ফোল্ডার (_H)" ++msgstr "ব্যক্তিগত ফোল্ডার" + + #: ../gtk/gtkstock.c:374 + msgctxt "Stock label" +@@ -2988,58 +2988,58 @@ + #: ../gtk/gtkstock.c:376 + msgctxt "Stock label" + msgid "_Index" +-msgstr "সূচিপত্র (_I)" ++msgstr "সূচিপত্র" + + #: ../gtk/gtkstock.c:377 + msgctxt "Stock label" + msgid "_Information" +-msgstr "তথ্য (_I)" ++msgstr "তথ্য" + + #: ../gtk/gtkstock.c:378 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "তেরছা (_I)" ++msgstr "তেরছা" + + #: ../gtk/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "চিহ্নিত স্থানে চলুন (_J)" ++msgstr "চিহ্নিত স্থানে চলুন" + + #. This is about text justification, "centered text" + #: ../gtk/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Center" +-msgstr "কেন্দ্রস্থিত (_C)" ++msgstr "কেন্দ্রস্থিত" + + #. This is about text justification + #: ../gtk/gtkstock.c:383 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "পূরণ (_F)" ++msgstr "পূরণ" + + #. This is about text justification, "left-justified text" + #: ../gtk/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Left" +-msgstr "বাঁদিকে (_L)" ++msgstr "বাঁদিকে" + + #. This is about text justification, "right-justified text" + #: ../gtk/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Right" +-msgstr "ডানদিকে (_R)" ++msgstr "ডানদিকে" + + #. Media label, as in "fast forward" + #: ../gtk/gtkstock.c:390 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "এগিয়ে চলুন (_F)" ++msgstr "এগিয়ে চলুন" + + #. Media label, as in "next song" + #: ../gtk/gtkstock.c:392 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "পরবর্তী (_N)" ++msgstr "পরবর্তী" + + #. Media label, as in "pause music" + #: ../gtk/gtkstock.c:394 +@@ -3051,7 +3051,7 @@ + #: ../gtk/gtkstock.c:396 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "বাজানো হবে (_P)" ++msgstr "বাজানো হবে" + + #. Media label, as in "previous song" + #: ../gtk/gtkstock.c:398 +@@ -3064,7 +3064,7 @@ + #: ../gtk/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "রেকর্ড করা হবে (_R)" ++msgstr "রেকর্ড করা হবে" + + #. Media label + #: ../gtk/gtkstock.c:402 +@@ -3076,32 +3076,32 @@ + #: ../gtk/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "বন্ধ করুন (_S)" ++msgstr "বন্ধ করুন" + + #: ../gtk/gtkstock.c:405 + msgctxt "Stock label" + msgid "_Network" +-msgstr "নেটওয়ার্ক (_N)" ++msgstr "নেটওয়ার্ক" + + #: ../gtk/gtkstock.c:406 + msgctxt "Stock label" + msgid "_New" +-msgstr "নতুন (_N)" ++msgstr "নতুন" + + #: ../gtk/gtkstock.c:407 + msgctxt "Stock label" + msgid "_No" +-msgstr "না (_N)" ++msgstr "না" + + #: ../gtk/gtkstock.c:408 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ঠিক আছে (_O)" ++msgstr "ঠিক আছে" + + #: ../gtk/gtkstock.c:409 + msgctxt "Stock label" + msgid "_Open" +-msgstr "খুলুন (_O)" ++msgstr "খুলুন" + + #. Page orientation + #: ../gtk/gtkstock.c:411 +@@ -3135,17 +3135,17 @@ + #: ../gtk/gtkstock.c:419 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "পেস্ট করুন (_P)" ++msgstr "পেস্ট করুন" + + #: ../gtk/gtkstock.c:420 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "পছন্দ (_P)" ++msgstr "পছন্দ" + + #: ../gtk/gtkstock.c:421 + msgctxt "Stock label" + msgid "_Print" +-msgstr "প্রিন্ট করুন (_P)" ++msgstr "প্রিন্ট করুন" + + #: ../gtk/gtkstock.c:422 + msgctxt "Stock label" +@@ -3155,128 +3155,128 @@ + #: ../gtk/gtkstock.c:423 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "বিবিধ বৈশিষ্ট্য (_P)" ++msgstr "বিবিধ বৈশিষ্ট্য" + + #: ../gtk/gtkstock.c:424 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "প্রস্থান (_Q)" ++msgstr "প্রস্থান" + + #: ../gtk/gtkstock.c:425 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "পুনরাবৃত্তি (_R)" ++msgstr "পুনরাবৃত্তি" + + #: ../gtk/gtkstock.c:426 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "নতুন করে প্রদর্শন (_R)" ++msgstr "নতুন করে প্রদর্শন" + + #: ../gtk/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "মুছে ফেলুন (_R)" ++msgstr "মুছে ফেলুন" + + #: ../gtk/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "পূর্বাবস্থা (_R)" ++msgstr "পূর্বাবস্থা" + + #: ../gtk/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Save" +-msgstr "সংরক্ষণ করুন (_S)" ++msgstr "সংরক্ষণ করুন" + + #: ../gtk/gtkstock.c:430 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "নতুন রূপে সংরক্ষণ (_A)" ++msgstr "নতুন রূপে সংরক্ষণ" + + #: ../gtk/gtkstock.c:431 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "সমগ্র নির্বাচন করুন (_A)" ++msgstr "সমগ্র নির্বাচন করুন" + + #: ../gtk/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Color" +-msgstr "রং (_C)" ++msgstr "রং" + + #: ../gtk/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ফন্ট (_F)" ++msgstr "ফন্ট" + + #. Sorting direction + #: ../gtk/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ঊর্ধ্ব ক্রমানুসারে (_A)" ++msgstr "ঊর্ধ্ব ক্রমানুসারে" + + #. Sorting direction + #: ../gtk/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "নিম্ন ক্রমানুসারে (_D)" ++msgstr "নিম্ন ক্রমানুসারে" + + #: ../gtk/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "বানান-পরীক্ষণ (_S)" ++msgstr "বানান-পরীক্ষণ" + + #: ../gtk/gtkstock.c:439 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "বন্ধ করুন (_S)" ++msgstr "বন্ধ করুন" + + #. Font variant + #: ../gtk/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "মধ্যরেখাঙ্কন (_S)" ++msgstr "মধ্যরেখাঙ্কন" + + #: ../gtk/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "পুনরুদ্ধার (_U)" ++msgstr "পুনরুদ্ধার" + + #. Font variant + #: ../gtk/gtkstock.c:444 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "নিম্নরেখাঙ্কন (_U)" ++msgstr "নিম্নরেখাঙ্কন" + + #: ../gtk/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "পূর্বাবস্থা (_U)" ++msgstr "পূর্বাবস্থা" + + #: ../gtk/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "হ্যাঁ (_Y)" ++msgstr "হ্যাঁ" + + #. Zoom + #: ../gtk/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "স্বাভাবিক মাপ (_N)" ++msgstr "স্বাভাবিক মাপ" + + #. Zoom + #: ../gtk/gtkstock.c:450 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "সর্বোত্তম মাপ (_F)" ++msgstr "সর্বোত্তম মাপ" + + #: ../gtk/gtkstock.c:451 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "বড় করে প্রদর্শন (_I)" ++msgstr "বড় করে প্রদর্শন" + + #: ../gtk/gtkstock.c:452 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ছোট করে প্রদর্শন (_O)" ++msgstr "ছোট করে প্রদর্শন" + + #. Translators: if the "on" state label requires more than three + #. * glyphs then use MEDIUM VERTICAL BAR (U+2759) as the text for +@@ -3425,11 +3425,11 @@ + + #: ../gtk/gtktextutil.c:58 + msgid "LRM _Left-to-right mark" +-msgstr "LRM বাঁদিক-থেকে-ডানদিকের চিহ্ন (_L)" ++msgstr "LRM বাঁদিক-থেকে-ডানদিকের চিহ্ন" + + #: ../gtk/gtktextutil.c:59 + msgid "RLM _Right-to-left mark" +-msgstr "RLM ডানরিক-থেকে-বাঁদিকের চিহ্ন (_R)" ++msgstr "RLM ডানরিক-থেকে-বাঁদিকের চিহ্ন" + + #: ../gtk/gtktextutil.c:60 + msgid "LRE Left-to-right _embedding" +@@ -3449,11 +3449,11 @@ + + #: ../gtk/gtktextutil.c:64 + msgid "PDF _Pop directional formatting" +-msgstr "PDF পপ দিশার বিন্যাস (_P)" ++msgstr "PDF পপ দিশার বিন্যাস" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWS _Zero width space" +-msgstr "ZWS শূণ্য মাপের অন্তর্বর্তী স্থান (_Z)" ++msgstr "ZWS শূণ্য মাপের অন্তর্বর্তী স্থান" + + #: ../gtk/gtktextutil.c:66 + msgid "ZWJ Zero width _joiner" +@@ -4902,7 +4902,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:735 + msgid "_Output format" +-msgstr "আউটপুটের বিন্যাস (_O)" ++msgstr "আউটপুটের বিন্যাস" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +diff -urN a/po/dz.po b/po/dz.po +--- a/po/dz.po 2025-06-09 19:54:59.477434229 -0700 ++++ b/po/dz.po 2025-06-09 20:11:48.752736770 -0700 +@@ -93,7 +93,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "BackSpace" +-msgstr "ཚབ་བཙུགས།(_R)" ++msgstr "ཚབ་བཙུགས།" + + #: gdk/keyname-table.h:3941 + #, fuzzy +@@ -144,25 +144,25 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Left" +-msgstr "གཡོན་:(_L)" ++msgstr "གཡོན་:" + + #: gdk/keyname-table.h:3950 + #, fuzzy + msgctxt "keyboard label" + msgid "Up" +-msgstr "ཡར།(_U)" ++msgstr "ཡར།" + + #: gdk/keyname-table.h:3951 + #, fuzzy + msgctxt "keyboard label" + msgid "Right" +-msgstr "གཡས་:(_R)" ++msgstr "གཡས་:" + + #: gdk/keyname-table.h:3952 + #, fuzzy + msgctxt "keyboard label" + msgid "Down" +-msgstr "མར།(_D)" ++msgstr "མར།" + + #: gdk/keyname-table.h:3953 + #, fuzzy +@@ -174,7 +174,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Page_Down" +-msgstr "མར།(_D)" ++msgstr "མར།" + + #: gdk/keyname-table.h:3955 + msgctxt "keyboard label" +@@ -206,7 +206,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Space" +-msgstr "ཚབ་བཙུགས།(_R)" ++msgstr "ཚབ་བཙུགས།" + + #: gdk/keyname-table.h:3961 + msgctxt "keyboard label" +@@ -223,31 +223,31 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Home" +-msgstr "ཁྱིམ།(_H)" ++msgstr "ཁྱིམ།" + + #: gdk/keyname-table.h:3964 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Left" +-msgstr "གཡོན་:(_L)" ++msgstr "གཡོན་:" + + #: gdk/keyname-table.h:3965 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Up" +-msgstr "ཡར།(_U)" ++msgstr "ཡར།" + + #: gdk/keyname-table.h:3966 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Right" +-msgstr "གཡས་:(_R)" ++msgstr "གཡས་:" + + #: gdk/keyname-table.h:3967 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Down" +-msgstr "མར།(_D)" ++msgstr "མར།" + + #: gdk/keyname-table.h:3968 + msgctxt "keyboard label" +@@ -263,7 +263,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Page_Down" +-msgstr "ལྡེ་གདན་ཤོག་ལེབ་མར།(_D)" ++msgstr "ལྡེ་གདན་ཤོག་ལེབ་མར།" + + #: gdk/keyname-table.h:3971 + msgctxt "keyboard label" +@@ -289,13 +289,13 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Delete" +-msgstr "བཏོན་གཏང༌།(_D)" ++msgstr "བཏོན་གཏང༌།" + + #: gdk/keyname-table.h:3976 + #, fuzzy + msgctxt "keyboard label" + msgid "Delete" +-msgstr "བཏོན་གཏང༌།(_D)" ++msgstr "བཏོན་གཏང༌།" + + #. Description of --sync in --help output + #: gdk/win32/gdkmain-win32.c:54 +@@ -375,7 +375,7 @@ + #. Add the license button + #: gtk/gtkaboutdialog.c:635 + msgid "_License" +-msgstr "ཆོག་ཐམ།(_L)" ++msgstr "ཆོག་ཐམ།" + + #: gtk/gtkaboutdialog.c:839 + #, fuzzy +@@ -476,7 +476,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Space" +-msgstr "ཚབ་བཙུགས།(_R)" ++msgstr "ཚབ་བཙུགས།" + + #: gtk/gtkaccellabel.c:816 + msgctxt "keyboard label" +@@ -642,7 +642,7 @@ + + #: gtk/gtkcolorsel.c:417 + msgid "_Hue:" +-msgstr "ཚོན་མདངས།(_H)" ++msgstr "ཚོན་མདངས།" + + #: gtk/gtkcolorsel.c:418 + msgid "Position on the color wheel." +@@ -650,7 +650,7 @@ + + #: gtk/gtkcolorsel.c:420 + msgid "_Saturation:" +-msgstr "མཐའ་ཚད།(_S)" ++msgstr "མཐའ་ཚད།" + + #: gtk/gtkcolorsel.c:421 + #, fuzzy +@@ -659,7 +659,7 @@ + + #: gtk/gtkcolorsel.c:422 + msgid "_Value:" +-msgstr "བེ་ལུ།(_V)" ++msgstr "བེ་ལུ།" + + #: gtk/gtkcolorsel.c:423 + msgid "Brightness of the color." +@@ -667,7 +667,7 @@ + + #: gtk/gtkcolorsel.c:424 + msgid "_Red:" +-msgstr "དམརཔོ།(_R)" ++msgstr "དམརཔོ།" + + #: gtk/gtkcolorsel.c:425 + msgid "Amount of red light in the color." +@@ -675,7 +675,7 @@ + + #: gtk/gtkcolorsel.c:426 + msgid "_Green:" +-msgstr "ལྗང་ཁུ་:(_G)" ++msgstr "ལྗང་ཁུ་:" + + #: gtk/gtkcolorsel.c:427 + msgid "Amount of green light in the color." +@@ -683,7 +683,7 @@ + + #: gtk/gtkcolorsel.c:428 + msgid "_Blue:" +-msgstr "ཧོནམ།(_B)" ++msgstr "ཧོནམ།" + + #: gtk/gtkcolorsel.c:429 + msgid "Amount of blue light in the color." +@@ -711,7 +711,7 @@ + + #: gtk/gtkcolorsel.c:500 + msgid "_Palette:" +-msgstr "པེ་ལེཊི་:(_P)" ++msgstr "པེ་ལེཊི་:" + + #: gtk/gtkcolorsel.c:529 + msgid "Color Wheel" +@@ -747,7 +747,7 @@ + + #: gtk/gtkcolorsel.c:1396 + msgid "_Save color here" +-msgstr "ཚོས་གཞི་ནཱ་ལུ་སྲུངས།(_S)" ++msgstr "ཚོས་གཞི་ནཱ་ལུ་སྲུངས།" + + #: gtk/gtkcolorsel.c:1601 + msgid "" +@@ -796,11 +796,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1059 + msgid "_Width:" +-msgstr "རྒྱ་ཚད་:(_W)" ++msgstr "རྒྱ་ཚད་:" + + #: gtk/gtkcustompaperunixdialog.c:1071 + msgid "_Height:" +-msgstr "མཐོ་ཚད་:(_H)" ++msgstr "མཐོ་ཚད་:" + + #: gtk/gtkcustompaperunixdialog.c:1083 + msgid "Paper Size" +@@ -808,19 +808,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1092 + msgid "_Top:" +-msgstr "མགོ་:(_T)" ++msgstr "མགོ་:" + + #: gtk/gtkcustompaperunixdialog.c:1104 + msgid "_Bottom:" +-msgstr "གཤམ་:(_B)" ++msgstr "གཤམ་:" + + #: gtk/gtkcustompaperunixdialog.c:1116 + msgid "_Left:" +-msgstr "གཡོན་:(_L)" ++msgstr "གཡོན་:" + + #: gtk/gtkcustompaperunixdialog.c:1128 + msgid "_Right:" +-msgstr "གཡས་:(_R)" ++msgstr "གཡས་:" + + #: gtk/gtkcustompaperunixdialog.c:1169 + msgid "Paper Margins" +@@ -828,11 +828,11 @@ + + #: gtk/gtkentry.c:8601 gtk/gtktextview.c:8248 + msgid "Input _Methods" +-msgstr "ཨིན་པུཊི་ཐབས་ཤེས།(_M)" ++msgstr "ཨིན་པུཊི་ཐབས་ཤེས།" + + #: gtk/gtkentry.c:8615 gtk/gtktextview.c:8262 + msgid "_Insert Unicode Control Character" +-msgstr "ཡུ་ནི་ཀོཌི་ ཚད་འཛིན་གྱི་ ཡིག་འབྲུ་བཙུགས།(_I)" ++msgstr "ཡུ་ནི་ཀོཌི་ ཚད་འཛིན་གྱི་ ཡིག་འབྲུ་བཙུགས།" + + #: gtk/gtkentry.c:10015 + msgid "Caps Lock and Num Lock are on" +@@ -841,12 +841,12 @@ + #: gtk/gtkentry.c:10017 + #, fuzzy + msgid "Num Lock is on" +-msgstr "གནས་ཁོངས་འདྲ་བཤུས་རྐྱབས།(_L)" ++msgstr "གནས་ཁོངས་འདྲ་བཤུས་རྐྱབས།" + + #: gtk/gtkentry.c:10019 + #, fuzzy + msgid "Caps Lock is on" +-msgstr "གནས་ཁོངས་འདྲ་བཤུས་རྐྱབས།(_L)" ++msgstr "གནས་ཁོངས་འདྲ་བཤུས་རྐྱབས།" + + #. **************** * + #. * Private Macros * +@@ -973,7 +973,7 @@ + + #: gtk/gtkfilechooserdefault.c:3706 + msgid "_Add" +-msgstr "ཁ་སྐོང་།(_A)" ++msgstr "ཁ་སྐོང་།" + + #: gtk/gtkfilechooserdefault.c:3713 + msgid "Add the selected folder to the Bookmarks" +@@ -981,7 +981,7 @@ + + #: gtk/gtkfilechooserdefault.c:3718 + msgid "_Remove" +-msgstr "རྩ་བསྐྲད་གཏང་།(_R)" ++msgstr "རྩ་བསྐྲད་གཏང་།" + + #: gtk/gtkfilechooserdefault.c:3860 + msgid "Could not select file" +@@ -989,11 +989,11 @@ + + #: gtk/gtkfilechooserdefault.c:4035 + msgid "_Add to Bookmarks" +-msgstr "དེབ་རྟགས་ཚུ་ལུ་ ཁ་སྐོང་རྐྱབས།(_A)" ++msgstr "དེབ་རྟགས་ཚུ་ལུ་ ཁ་སྐོང་རྐྱབས།" + + #: gtk/gtkfilechooserdefault.c:4048 + msgid "Show _Hidden Files" +-msgstr "སྦ་སྟེ་ཡོད་པའི་ཡིག་སྣོད་ཚུ་སྟོན།(_H)" ++msgstr "སྦ་སྟེ་ཡོད་པའི་ཡིག་སྣོད་ཚུ་སྟོན།" + + #: gtk/gtkfilechooserdefault.c:4055 + msgid "Show _Size Column" +@@ -1018,11 +1018,11 @@ + #. Label + #: gtk/gtkfilechooserdefault.c:4624 gtk/gtkprinteroptionwidget.c:801 + msgid "_Name:" +-msgstr "མིང་:(_N)" ++msgstr "མིང་:" + + #: gtk/gtkfilechooserdefault.c:4667 + msgid "_Browse for other folders" +-msgstr "སྣོད་འཛིན་གཞན་གྱི་དོན་ལུ་བརྡ་འཚོལ།(_B)" ++msgstr "སྣོད་འཛིན་གཞན་གྱི་དོན་ལུ་བརྡ་འཚོལ།" + + #: gtk/gtkfilechooserdefault.c:4937 + msgid "Type a file name" +@@ -1035,7 +1035,7 @@ + + #: gtk/gtkfilechooserdefault.c:4990 + msgid "_Location:" +-msgstr "གནས་ཁོངས་:(_L)" ++msgstr "གནས་ཁོངས་:" + + #: gtk/gtkfilechooserdefault.c:5194 + msgid "Save in _folder:" +@@ -1098,7 +1098,7 @@ + + #: gtk/gtkfilechooserdefault.c:8005 gtk/gtkprintunixdialog.c:491 + msgid "_Replace" +-msgstr "ཚབ་བཙུགས།(_R)" ++msgstr "ཚབ་བཙུགས།" + + #: gtk/gtkfilechooserdefault.c:8658 + #, fuzzy +@@ -1220,11 +1220,11 @@ + + #: gtk/gtkfontsel.c:370 + msgid "_Family:" +-msgstr "རིགས་ཚན་:(_F)" ++msgstr "རིགས་ཚན་:" + + #: gtk/gtkfontsel.c:376 + msgid "_Style:" +-msgstr "བཟོ་རྣམ།(_S)" ++msgstr "བཟོ་རྣམ།" + + #: gtk/gtkfontsel.c:382 + msgid "Si_ze:" +@@ -1233,7 +1233,7 @@ + #. create the text entry widget + #: gtk/gtkfontsel.c:559 + msgid "_Preview:" +-msgstr "སྔོན་ལྟ་:(_P)" ++msgstr "སྔོན་ལྟ་:" + + #: gtk/gtkfontsel.c:1659 + msgid "Font Selection" +@@ -1374,17 +1374,17 @@ + #: gtk/gtkmountoperation.c:605 + #, fuzzy + msgid "_Username:" +-msgstr "བསྐྱར་མིང་བཏགས།(_R)" ++msgstr "བསྐྱར་མིང་བཏགས།" + + #: gtk/gtkmountoperation.c:610 + #, fuzzy + msgid "_Domain:" +-msgstr "གནས་ཁོངས་:(_L)" ++msgstr "གནས་ཁོངས་:" + + #: gtk/gtkmountoperation.c:616 + #, fuzzy + msgid "_Password:" +-msgstr "ཨེབ་ཤུགས་:(_P)" ++msgstr "ཨེབ་ཤུགས་:" + + #: gtk/gtkmountoperation.c:634 + msgid "Forget password _immediately" +@@ -1487,15 +1487,15 @@ + + #: gtk/gtkpagesetupunixdialog.c:909 + msgid "_Format for:" +-msgstr "གི་དོན་ལུ་རྩ་སྒྲིག(_F)" ++msgstr "གི་དོན་ལུ་རྩ་སྒྲིག" + + #: gtk/gtkpagesetupunixdialog.c:931 gtk/gtkprintunixdialog.c:3456 + msgid "_Paper size:" +-msgstr "ཤོག་ཀུའི་ཚད་:(_P)" ++msgstr "ཤོག་ཀུའི་ཚད་:" + + #: gtk/gtkpagesetupunixdialog.c:962 + msgid "_Orientation:" +-msgstr "ཕྱོགས་:(_O)" ++msgstr "ཕྱོགས་:" + + #: gtk/gtkpagesetupunixdialog.c:1026 gtk/gtkprintunixdialog.c:3518 + msgid "Page Setup" +@@ -1530,7 +1530,7 @@ + + #: gtk/gtkprinteroptionwidget.c:813 + msgid "_Save in folder:" +-msgstr "སྣོད་འཛིན་ནང༌སྲུངས།(_S)" ++msgstr "སྣོད་འཛིན་ནང༌སྲུངས།" + + #. translators: this string is the default job title for print + #. * jobs. %s gets replaced by the application name, %d gets replaced +@@ -1721,7 +1721,7 @@ + #: gtk/gtkprintunixdialog.c:2207 + #, fuzzy + msgid "Se_lection" +-msgstr "སེལ་འཐུ།(_S)" ++msgstr "སེལ་འཐུ།" + + #: gtk/gtkprintunixdialog.c:2216 + #, fuzzy +@@ -1754,7 +1754,7 @@ + + #: gtk/gtkprintunixdialog.c:2271 + msgid "_Reverse" +-msgstr "རྒྱབ་ལོག(_R)" ++msgstr "རྒྱབ་ལོག" + + #: gtk/gtkprintunixdialog.c:2291 + msgid "General" +@@ -1818,7 +1818,7 @@ + #: gtk/gtkprintunixdialog.c:3053 + #, fuzzy + msgid "Left to right" +-msgstr "ཨེལ་ཨར་ཨེམ། གཡོན་ལས་གཡས་ཀྱི་རྟགས།(_L)" ++msgstr "ཨེལ་ཨར་ཨེམ། གཡོན་ལས་གཡས་ཀྱི་རྟགས།" + + #: gtk/gtkprintunixdialog.c:3054 + #, fuzzy +@@ -1853,7 +1853,7 @@ + + #: gtk/gtkprintunixdialog.c:3359 + msgid "_Only print:" +-msgstr "རྐྱངམ་གཅིག་དཔར་བསྐྲུན་འབད།(_O)" ++msgstr "རྐྱངམ་གཅིག་དཔར་བསྐྲུན་འབད།" + + #. In enum order + #: gtk/gtkprintunixdialog.c:3374 +@@ -1891,7 +1891,7 @@ + #: gtk/gtkprintunixdialog.c:3480 + #, fuzzy + msgid "Or_ientation:" +-msgstr "ཕྱོགས་:(_O)" ++msgstr "ཕྱོགས་:" + + #. In enum order + #: gtk/gtkprintunixdialog.c:3495 +@@ -1924,7 +1924,7 @@ + + #: gtk/gtkprintunixdialog.c:3564 + msgid "_Billing info:" +-msgstr "ཐོབ་རྩིས་བརྡ་དོན་:(_B)" ++msgstr "ཐོབ་རྩིས་བརྡ་དོན་:" + + #: gtk/gtkprintunixdialog.c:3582 + msgid "Print Document" +@@ -1935,7 +1935,7 @@ + #. + #: gtk/gtkprintunixdialog.c:3591 + msgid "_Now" +-msgstr "ད་ལྟོ།(_N)" ++msgstr "ད་ལྟོ།" + + #: gtk/gtkprintunixdialog.c:3602 + msgid "A_t:" +@@ -1979,7 +1979,7 @@ + #. + #: gtk/gtkprintunixdialog.c:3682 + msgid "_After:" +-msgstr "ཤུལ་ལས་:(_A)" ++msgstr "ཤུལ་ལས་:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -2055,19 +2055,19 @@ + + #: gtk/gtkrecentchooserdefault.c:1783 + msgid "Copy _Location" +-msgstr "གནས་ཁོངས་འདྲ་བཤུས་རྐྱབས།(_L)" ++msgstr "གནས་ཁོངས་འདྲ་བཤུས་རྐྱབས།" + + #: gtk/gtkrecentchooserdefault.c:1796 + msgid "_Remove From List" +-msgstr "ཐོ་ཡིག་ནང་ལས་རྩ་བསྐྲད་གཏང་།(_R)" ++msgstr "ཐོ་ཡིག་ནང་ལས་རྩ་བསྐྲད་གཏང་།" + + #: gtk/gtkrecentchooserdefault.c:1805 + msgid "_Clear List" +-msgstr "ཐོ་ཡིག་བསལ།(_C)" ++msgstr "ཐོ་ཡིག་བསལ།" + + #: gtk/gtkrecentchooserdefault.c:1819 + msgid "Show _Private Resources" +-msgstr "སྒེར་གྱི་ཐོན་ཁུངས་ཚུ་སྟོན།(_P)" ++msgstr "སྒེར་གྱི་ཐོན་ཁུངས་ཚུ་སྟོན།" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -2167,49 +2167,49 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_About" +-msgstr "སྐོར་ལས།(_A)" ++msgstr "སྐོར་ལས།" + + #: gtk/gtkstock.c:322 + #, fuzzy + msgctxt "Stock label" + msgid "_Add" +-msgstr "ཁ་སྐོང་།(_A)" ++msgstr "ཁ་སྐོང་།" + + #: gtk/gtkstock.c:323 + #, fuzzy + msgctxt "Stock label" + msgid "_Apply" +-msgstr "འཇུག་སྤྱོད་འབད།(_A)" ++msgstr "འཇུག་སྤྱོད་འབད།" + + #: gtk/gtkstock.c:324 + #, fuzzy + msgctxt "Stock label" + msgid "_Bold" +-msgstr "རྒྱགས་པ།(_B)" ++msgstr "རྒྱགས་པ།" + + #: gtk/gtkstock.c:325 + #, fuzzy + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ཆ་མེད་གཏང༌།(_C)" ++msgstr "ཆ་མེད་གཏང༌།" + + #: gtk/gtkstock.c:326 + #, fuzzy + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "སི་ཌི་-རཱོམ།(_C)" ++msgstr "སི་ཌི་-རཱོམ།" + + #: gtk/gtkstock.c:327 + #, fuzzy + msgctxt "Stock label" + msgid "_Clear" +-msgstr "བསལ།(_C)" ++msgstr "བསལ།" + + #: gtk/gtkstock.c:328 + #, fuzzy + msgctxt "Stock label" + msgid "_Close" +-msgstr "ཁ་བསྡམས།(_C)" ++msgstr "ཁ་བསྡམས།" + + #: gtk/gtkstock.c:329 + #, fuzzy +@@ -2221,25 +2221,25 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Convert" +-msgstr "གཞི་བསྒྱུར་འབད།(_C)" ++msgstr "གཞི་བསྒྱུར་འབད།" + + #: gtk/gtkstock.c:331 + #, fuzzy + msgctxt "Stock label" + msgid "_Copy" +-msgstr "འདྲ་བཤུས།(_C)" ++msgstr "འདྲ་བཤུས།" + + #: gtk/gtkstock.c:332 + #, fuzzy + msgctxt "Stock label" + msgid "Cu_t" +-msgstr "བཏོག(_C)" ++msgstr "བཏོག" + + #: gtk/gtkstock.c:333 + #, fuzzy + msgctxt "Stock label" + msgid "_Delete" +-msgstr "བཏོན་གཏང༌།(_D)" ++msgstr "བཏོན་གཏང༌།" + + #: gtk/gtkstock.c:334 + #, fuzzy +@@ -2251,129 +2251,129 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "མཐུན་ལམ་བཏོག(_D)" ++msgstr "མཐུན་ལམ་བཏོག" + + #: gtk/gtkstock.c:336 + #, fuzzy + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ལག་ལེན་འཐབ།(_E)" ++msgstr "ལག་ལེན་འཐབ།" + + #: gtk/gtkstock.c:337 + #, fuzzy + msgctxt "Stock label" + msgid "_Edit" +-msgstr "ཞུན་དག(_E)" ++msgstr "ཞུན་དག" + + #: gtk/gtkstock.c:338 + #, fuzzy + msgctxt "Stock label" + msgid "_File" +-msgstr "ཡིག་སྣོད་ཚུ།(_F)" ++msgstr "ཡིག་སྣོད་ཚུ།" + + #: gtk/gtkstock.c:339 + #, fuzzy + msgctxt "Stock label" + msgid "_Find" +-msgstr "འཚོལ།(_F)" ++msgstr "འཚོལ།" + + #: gtk/gtkstock.c:340 + #, fuzzy + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "འཚོལ་ཞིནམ་ལས་ཚབ་བཙུགས།(_R)" ++msgstr "འཚོལ་ཞིནམ་ལས་ཚབ་བཙུགས།" + + #: gtk/gtkstock.c:341 + #, fuzzy + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ཕོལོ་པི།(_F)" ++msgstr "ཕོལོ་པི།" + + #: gtk/gtkstock.c:342 + #, fuzzy + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "གསལ་གཞི་གངམ།(_F)" ++msgstr "གསལ་གཞི་གངམ།" + + #: gtk/gtkstock.c:343 + #, fuzzy + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "གསལ་གཞི་གངམ་སྦེ་བཞག(_L)" ++msgstr "གསལ་གཞི་གངམ་སྦེ་བཞག" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/gtkstock.c:345 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "གཤམ་:(_B)" ++msgstr "གཤམ་:" + + #. This is a navigation label as in "go to the first page" + #: gtk/gtkstock.c:347 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "དང་པ།(_F)" ++msgstr "དང་པ།" + + #. This is a navigation label as in "go to the last page" + #: gtk/gtkstock.c:349 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "མཐའ་མཇུག(_L)" ++msgstr "མཐའ་མཇུག" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/gtkstock.c:351 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "མགོ་:(_T)" ++msgstr "མགོ་:" + + #. This is a navigation label as in "go back" + #: gtk/gtkstock.c:353 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "རྒྱབ།(_B)" ++msgstr "རྒྱབ།" + + #. This is a navigation label as in "go down" + #: gtk/gtkstock.c:355 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "མར།(_D)" ++msgstr "མར།" + + #. This is a navigation label as in "go forward" + #: gtk/gtkstock.c:357 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "གདོང་བསྐྱོད།(_F)" ++msgstr "གདོང་བསྐྱོད།" + + #. This is a navigation label as in "go up" + #: gtk/gtkstock.c:359 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ཡར།(_U)" ++msgstr "ཡར།" + + #: gtk/gtkstock.c:360 + #, fuzzy + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "ཧརཌི་ཌིཀསི།(_H)" ++msgstr "ཧརཌི་ཌིཀསི།" + + #: gtk/gtkstock.c:361 + #, fuzzy + msgctxt "Stock label" + msgid "_Help" +-msgstr "གྲོགས་རམ།(_H)" ++msgstr "གྲོགས་རམ།" + + #: gtk/gtkstock.c:362 + #, fuzzy + msgctxt "Stock label" + msgid "_Home" +-msgstr "ཁྱིམ།(_H)" ++msgstr "ཁྱིམ།" + + #: gtk/gtkstock.c:363 + #, fuzzy +@@ -2391,67 +2391,67 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Index" +-msgstr "ཟུར་ཐོ།(_I)" ++msgstr "ཟུར་ཐོ།" + + #: gtk/gtkstock.c:366 + #, fuzzy + msgctxt "Stock label" + msgid "_Information" +-msgstr "བརྡ་དོན།(_I)" ++msgstr "བརྡ་དོན།" + + #: gtk/gtkstock.c:367 + #, fuzzy + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ཨི་ཊ་ལིཀ(_I)" ++msgstr "ཨི་ཊ་ལིཀ" + + #: gtk/gtkstock.c:368 + #, fuzzy + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ལུ་མཆོངས།(_J)" ++msgstr "ལུ་མཆོངས།" + + #. This is about text justification, "centered text" + #: gtk/gtkstock.c:370 + #, fuzzy + msgctxt "Stock label" + msgid "_Center" +-msgstr "གཞི་བསྒྱུར་འབད།(_C)" ++msgstr "གཞི་བསྒྱུར་འབད།" + + #. This is about text justification + #: gtk/gtkstock.c:372 + #, fuzzy + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ཡིག་སྣོད་ཚུ།(_F)" ++msgstr "ཡིག་སྣོད་ཚུ།" + + #. This is about text justification, "left-justified text" + #: gtk/gtkstock.c:374 + #, fuzzy + msgctxt "Stock label" + msgid "_Left" +-msgstr "གཡོན་:(_L)" ++msgstr "གཡོན་:" + + #. This is about text justification, "right-justified text" + #: gtk/gtkstock.c:376 + #, fuzzy + msgctxt "Stock label" + msgid "_Right" +-msgstr "གཡས་:(_R)" ++msgstr "གཡས་:" + + #. Media label, as in "fast forward" + #: gtk/gtkstock.c:379 + #, fuzzy + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "གདོང་བསྐྱོད།(_F)" ++msgstr "གདོང་བསྐྱོད།" + + #. Media label, as in "next song" + #: gtk/gtkstock.c:381 + #, fuzzy + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "གསརཔ།(_S)" ++msgstr "གསརཔ།" + + #. Media label, as in "pause music" + #: gtk/gtkstock.c:383 +@@ -2479,7 +2479,7 @@ + #, fuzzy + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "སྒྲ་བཟུང་།(_R)" ++msgstr "སྒྲ་བཟུང་།" + + #. Media label + #: gtk/gtkstock.c:391 +@@ -2493,37 +2493,37 @@ + #, fuzzy + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "བཀག(_S)" ++msgstr "བཀག" + + #: gtk/gtkstock.c:394 + #, fuzzy + msgctxt "Stock label" + msgid "_Network" +-msgstr "ཡོངས་འབྲེལ།(_N)" ++msgstr "ཡོངས་འབྲེལ།" + + #: gtk/gtkstock.c:395 + #, fuzzy + msgctxt "Stock label" + msgid "_New" +-msgstr "གསརཔ།(_S)" ++msgstr "གསརཔ།" + + #: gtk/gtkstock.c:396 + #, fuzzy + msgctxt "Stock label" + msgid "_No" +-msgstr "མེན།(_N)" ++msgstr "མེན།" + + #: gtk/gtkstock.c:397 + #, fuzzy + msgctxt "Stock label" + msgid "_OK" +-msgstr "བཏུབ།(_O)" ++msgstr "བཏུབ།" + + #: gtk/gtkstock.c:398 + #, fuzzy + msgctxt "Stock label" + msgid "_Open" +-msgstr "ཁ་ཕྱེ།(_O)" ++msgstr "ཁ་ཕྱེ།" + + #. Page orientation + #: gtk/gtkstock.c:400 +@@ -2569,13 +2569,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "དགའ་གདམ་ཚུ།(_P)" ++msgstr "དགའ་གདམ་ཚུ།" + + #: gtk/gtkstock.c:410 + #, fuzzy + msgctxt "Stock label" + msgid "_Print" +-msgstr "དཔར་བསྐྲུན།(_P)" ++msgstr "དཔར་བསྐྲུན།" + + #: gtk/gtkstock.c:411 + #, fuzzy +@@ -2587,151 +2587,151 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Properties" +-msgstr "རྒྱུ་དངོས།(_P)" ++msgstr "རྒྱུ་དངོས།" + + #: gtk/gtkstock.c:413 + #, fuzzy + msgctxt "Stock label" + msgid "_Quit" +-msgstr "སྤངས།(_Q)" ++msgstr "སྤངས།" + + #: gtk/gtkstock.c:414 + #, fuzzy + msgctxt "Stock label" + msgid "_Redo" +-msgstr "ལོག་འབད།(_R)" ++msgstr "ལོག་འབད།" + + #: gtk/gtkstock.c:415 + #, fuzzy + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ཡང་སེལ།(_R)" ++msgstr "ཡང་སེལ།" + + #: gtk/gtkstock.c:416 + #, fuzzy + msgctxt "Stock label" + msgid "_Remove" +-msgstr "རྩ་བསྐྲད་གཏང་།(_R)" ++msgstr "རྩ་བསྐྲད་གཏང་།" + + #: gtk/gtkstock.c:417 + #, fuzzy + msgctxt "Stock label" + msgid "_Revert" +-msgstr "རྒྱབ་ལོག(_R)" ++msgstr "རྒྱབ་ལོག" + + #: gtk/gtkstock.c:418 + #, fuzzy + msgctxt "Stock label" + msgid "_Save" +-msgstr "སྲུངས།(_S)" ++msgstr "སྲུངས།" + + #: gtk/gtkstock.c:419 + #, fuzzy + msgctxt "Stock label" + msgid "Save _As" +-msgstr "དེ་སྦེ་སྲུངས།(_A)" ++msgstr "དེ་སྦེ་སྲུངས།" + + #: gtk/gtkstock.c:420 + #, fuzzy + msgctxt "Stock label" + msgid "Select _All" +-msgstr "ཆ་མཉམ་སེལ་འཐུ་འབད།(_A)" ++msgstr "ཆ་མཉམ་སེལ་འཐུ་འབད།" + + #: gtk/gtkstock.c:421 + #, fuzzy + msgctxt "Stock label" + msgid "_Color" +-msgstr "ཚོས་གཞི།(_C)" ++msgstr "ཚོས་གཞི།" + + #: gtk/gtkstock.c:422 + #, fuzzy + msgctxt "Stock label" + msgid "_Font" +-msgstr "ཡིག་གཟུགས།(_F)" ++msgstr "ཡིག་གཟུགས།" + + #. Sorting direction + #: gtk/gtkstock.c:424 + #, fuzzy + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ཡར་འཛེགས།(_A)" ++msgstr "ཡར་འཛེགས།" + + #. Sorting direction + #: gtk/gtkstock.c:426 + #, fuzzy + msgctxt "Stock label" + msgid "_Descending" +-msgstr "མར་འབབ།(_D)" ++msgstr "མར་འབབ།" + + #: gtk/gtkstock.c:427 + #, fuzzy + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "སྡེབ་དཔྱད།(_S)" ++msgstr "སྡེབ་དཔྱད།" + + #: gtk/gtkstock.c:428 + #, fuzzy + msgctxt "Stock label" + msgid "_Stop" +-msgstr "བཀག(_S)" ++msgstr "བཀག" + + #. Font variant + #: gtk/gtkstock.c:430 + #, fuzzy + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "སྦུག་འབྲེག(_S)" ++msgstr "སྦུག་འབྲེག" + + #: gtk/gtkstock.c:431 + #, fuzzy + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "བཏོན་བཤོལ།(_U)" ++msgstr "བཏོན་བཤོལ།" + + #. Font variant + #: gtk/gtkstock.c:433 + #, fuzzy + msgctxt "Stock label" + msgid "_Underline" +-msgstr "འོག་ཐིག(_U)" ++msgstr "འོག་ཐིག" + + #: gtk/gtkstock.c:434 + #, fuzzy + msgctxt "Stock label" + msgid "_Undo" +-msgstr "འབད་བཤོལ།(_U)" ++msgstr "འབད་བཤོལ།" + + #: gtk/gtkstock.c:435 + #, fuzzy + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ཨིན།(_Y)" ++msgstr "ཨིན།" + + #. Zoom + #: gtk/gtkstock.c:437 + #, fuzzy + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "སྤྱིར་བཏང་གི་ཚད།(_N)" ++msgstr "སྤྱིར་བཏང་གི་ཚད།" + + #. Zoom + #: gtk/gtkstock.c:439 + #, fuzzy + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "ལེགས་སྒྲིག(_F)" ++msgstr "ལེགས་སྒྲིག" + + #: gtk/gtkstock.c:440 + #, fuzzy + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "ཕྱིར་རྒྱས།(_I)" ++msgstr "ཕྱིར་རྒྱས།" + + #: gtk/gtkstock.c:441 + #, fuzzy + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ནང་ན་ཟུམ།(_O)" ++msgstr "ནང་ན་ཟུམ།" + + #: gtk/gtktextbufferrichtext.c:650 + #, c-format +@@ -2851,11 +2851,11 @@ + + #: gtk/gtktextutil.c:60 + msgid "LRM _Left-to-right mark" +-msgstr "ཨེལ་ཨར་ཨེམ། གཡོན་ལས་གཡས་ཀྱི་རྟགས།(_L)" ++msgstr "ཨེལ་ཨར་ཨེམ། གཡོན་ལས་གཡས་ཀྱི་རྟགས།" + + #: gtk/gtktextutil.c:61 + msgid "RLM _Right-to-left mark" +-msgstr "ཨར་ཨེལ་ཨེམ། གཡས་ལས་གཡོན་གྱི་རྟགས།(_R)" ++msgstr "ཨར་ཨེལ་ཨེམ། གཡས་ལས་གཡོན་གྱི་རྟགས།" + + #: gtk/gtktextutil.c:62 + msgid "LRE Left-to-right _embedding" +@@ -2875,11 +2875,11 @@ + + #: gtk/gtktextutil.c:66 + msgid "PDF _Pop directional formatting" +-msgstr "པི་ཌི་ཨེཕ། ཕྱོགས་སྟོན་རྩ་སྒྲིག་པོཔ་འབད།(_P)" ++msgstr "པི་ཌི་ཨེཕ། ཕྱོགས་སྟོན་རྩ་སྒྲིག་པོཔ་འབད།" + + #: gtk/gtktextutil.c:67 + msgid "ZWS _Zero width space" +-msgstr "ཛེཊི་དྲབ་ལུ་ཨེསི། རྒྱ་ཚད་བར་སྟོང་ཀླད་ཀོར།(_Z)" ++msgstr "ཛེཊི་དྲབ་ལུ་ཨེསི། རྒྱ་ཚད་བར་སྟོང་ཀླད་ཀོར།" + + #: gtk/gtktextutil.c:68 + msgid "ZWJ Zero width _joiner" +@@ -2911,7 +2911,7 @@ + #: gtk/gtkvolumebutton.c:83 + #, fuzzy + msgid "Volume" +-msgstr "བེ་ལུ།(_V)" ++msgstr "བེ་ལུ།" + + #: gtk/gtkvolumebutton.c:85 + msgid "Turns volume down or up" +@@ -4109,13 +4109,13 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:1020 + #, fuzzy + msgid "Username:" +-msgstr "བསྐྱར་མིང་བཏགས།(_R)" ++msgstr "བསྐྱར་མིང་བཏགས།" + + #: modules/printbackends/cups/gtkprintbackendcups.c:812 + #: modules/printbackends/cups/gtkprintbackendcups.c:1029 + #, fuzzy + msgid "Password:" +-msgstr "ཨེབ་ཤུགས་:(_P)" ++msgstr "ཨེབ་ཤུགས་:" + + #: modules/printbackends/cups/gtkprintbackendcups.c:850 + #, c-format +@@ -4169,7 +4169,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:1014 + #, fuzzy + msgid "Domain:" +-msgstr "གནས་ཁོངས་:(_L)" ++msgstr "གནས་ཁོངས་:" + + #: modules/printbackends/cups/gtkprintbackendcups.c:1044 + #, c-format +@@ -4384,7 +4384,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:3575 + #, fuzzy + msgid "Billing Info" +-msgstr "ཐོབ་རྩིས་བརྡ་དོན་:(_B)" ++msgstr "ཐོབ་རྩིས་བརྡ་དོན་:" + + #. Translators, these strings are names for various 'standard' cover + #. * pages that the printing system may support. +@@ -4431,7 +4431,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:3640 + #, fuzzy + msgid "After" +-msgstr "ཤུལ་ལས་:(_A)" ++msgstr "ཤུལ་ལས་:" + + #. Translators: this is the name of the option that controls when + #. * a print job is printed. Possible values are 'now', a specified time, +@@ -4492,7 +4492,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:651 + msgid "_Output format" +-msgstr "ཨའུཊི་པུཊི་རྩ་སྒྲིག།(_O)" ++msgstr "ཨའུཊི་པུཊི་རྩ་སྒྲིག།" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:395 + msgid "Print to LPR" +@@ -5259,13 +5259,13 @@ + #~ "ཁྱོད་ཀྱིས་འདི་ ངེས་པར་དུ་ སེལ་འཐུ་འབད་ནི་ཨིན་ན?" + + #~ msgid "_New Folder" +-#~ msgstr "སྣོད་འཛིན་གསརཔ།(_N)" ++#~ msgstr "སྣོད་འཛིན་གསརཔ།" + + #~ msgid "De_lete File" + #~ msgstr "ཡིག་སྣོད་བཏོན་གཏང༌།(_l)" + + #~ msgid "_Rename File" +-#~ msgstr "ཡིག་སྣོད་ལུ་བསྐྱར་མིང་བཏགས།(_R)" ++#~ msgstr "ཡིག་སྣོད་ལུ་བསྐྱར་མིང་བཏགས།" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -5275,7 +5275,7 @@ + #~ msgstr "སྣོད་འཛིན་གསརཔ།" + + #~ msgid "_Folder name:" +-#~ msgstr "སྣོད་འཛིན་གྱི་མིང༌:(_F)" ++#~ msgstr "སྣོད་འཛིན་གྱི་མིང༌:" + + #~ msgid "C_reate" + #~ msgstr "གསར་བསྐྲུན།(_r)" +@@ -5309,10 +5309,10 @@ + #~ msgstr "ཡིག་སྣོད་ \"%s\" ལུ་ བསྐྱར་མིང་བཏགས།" + + #~ msgid "_Rename" +-#~ msgstr "བསྐྱར་མིང་བཏགས།(_R)" ++#~ msgstr "བསྐྱར་མིང་བཏགས།" + + #~ msgid "_Selection: " +-#~ msgstr "སེལ་འཐུ།(_S)" ++#~ msgstr "སེལ་འཐུ།" + + #~ msgid "" + #~ "The filename \"%s\" couldn't be converted to UTF-8. (try setting the " +@@ -5334,7 +5334,7 @@ + #~ msgstr "གམ་མ།" + + #~ msgid "_Gamma value" +-#~ msgstr "གམ་མ་བེ་ལུ།(_G)" ++#~ msgstr "གམ་མ་བེ་ལུ།" + + #~ msgid "Input" + #~ msgstr "ཨིན་པུཊི།" +@@ -5343,7 +5343,7 @@ + #~ msgstr "རྒྱ་བསྐྱེད་ཅན་གྱི་ ཨིན་པུཊི་ ཐབས་འཕྲུལ་མིན་འདུག" + + #~ msgid "_Device:" +-#~ msgstr "ཐབས་འཕྲུལ་:(_D)" ++#~ msgstr "ཐབས་འཕྲུལ་:" + + #~ msgid "Disabled" + #~ msgstr "ལྕོགས་མིན་བཟོ་ཡི།" +@@ -5355,7 +5355,7 @@ + #~ msgstr "ཝིན་ཌོ།" + + #~ msgid "_Mode:" +-#~ msgstr "ཐབས་ལམ་:(_M)" ++#~ msgstr "ཐབས་ལམ་:" + + #~ msgid "Axes" + #~ msgstr "ཚད་ཐིག་ཚུ།" +@@ -5364,13 +5364,13 @@ + #~ msgstr "ལྡེ་མིག་ཚུ།" + + #~ msgid "_X:" +-#~ msgstr "ཨེགསི་:(_X)" ++#~ msgstr "ཨེགསི་:" + + #~ msgid "_Y:" +-#~ msgstr "ཝའི་:(_Y)" ++#~ msgstr "ཝའི་:" + + #~ msgid "_Pressure:" +-#~ msgstr "ཨེབ་ཤུགས་:(_P)" ++#~ msgstr "ཨེབ་ཤུགས་:" + + #~ msgid "X _tilt:" + #~ msgstr "ཨེགསི་གཡོ་བ་:(_t)" +@@ -5379,7 +5379,7 @@ + #~ msgstr "ཝའི་གཡོ་བ་:(_i)" + + #~ msgid "_Wheel:" +-#~ msgstr "འཁོར་ལོ་:(_W)" ++#~ msgstr "འཁོར་ལོ་:" + + #~ msgid "none" + #~ msgstr "ཅི་མེད།" +@@ -5418,10 +5418,10 @@ + #~ msgstr "ཐེམ་ལྡེ།" + + #~ msgid "keyboard label|Scroll_Lock" +-#~ msgstr "སྒྲིལ་ལྡེ།(_L)" ++#~ msgstr "སྒྲིལ་ལྡེ།" + + #~ msgid "keyboard label|Sys_Req" +-#~ msgstr "རིམ་ལུགས་ཞུ་བ།(_R)" ++#~ msgstr "རིམ་ལུགས་ཞུ་བ།" + + #~ msgid "keyboard label|Escape" + #~ msgstr "ཐར།" +@@ -5434,25 +5434,25 @@ + + #, fuzzy + #~ msgid "keyboard label|Left" +-#~ msgstr "ལྡེ་གདན་གཡོན།(_L)" ++#~ msgstr "ལྡེ་གདན་གཡོན།" + + #, fuzzy + #~ msgid "keyboard label|Up" +-#~ msgstr "ལྡེ་གདན་ཡར།(_U)" ++#~ msgstr "ལྡེ་གདན་ཡར།" + + #, fuzzy + #~ msgid "keyboard label|Right" +-#~ msgstr "ལྡེ་གདན་གཡས།(_R)" ++#~ msgstr "ལྡེ་གདན་གཡས།" + + #, fuzzy + #~ msgid "keyboard label|Down" +-#~ msgstr "ལྡེ་གདན་མར།(_D)" ++#~ msgstr "ལྡེ་གདན་མར།" + + #~ msgid "keyboard label|Page_Up" +-#~ msgstr "ཤོག་ལེབ་ཡར།(_U)" ++#~ msgstr "ཤོག་ལེབ་ཡར།" + + #~ msgid "keyboard label|Page_Down" +-#~ msgstr "ཤོག་ལེབ་མར།(_D)" ++#~ msgstr "ཤོག་ལེབ་མར།" + + #~ msgid "keyboard label|End" + #~ msgstr "མཇུག" +@@ -5470,49 +5470,49 @@ + #~ msgstr "ཨང་ལྡེ།" + + #~ msgid "keyboard label|KP_Space" +-#~ msgstr "ལྡེ་གདན་བར་སྟོང་།(_S)" ++#~ msgstr "ལྡེ་གདན་བར་སྟོང་།" + + #~ msgid "keyboard label|KP_Tab" +-#~ msgstr "ལྡེ་གདན་ཨེབ་ལྡེ།(_T)" ++#~ msgstr "ལྡེ་གདན་ཨེབ་ལྡེ།" + + #~ msgid "keyboard label|KP_Enter" +-#~ msgstr "ལྡེ་གདན་ལོག་ལྡེ།(_E)" ++#~ msgstr "ལྡེ་གདན་ལོག་ལྡེ།" + + #~ msgid "keyboard label|KP_Home" +-#~ msgstr "ལྡེ་གདན་ཁྱིམ།(_H)" ++#~ msgstr "ལྡེ་གདན་ཁྱིམ།" + + #~ msgid "keyboard label|KP_Left" +-#~ msgstr "ལྡེ་གདན་གཡོན།(_L)" ++#~ msgstr "ལྡེ་གདན་གཡོན།" + + #~ msgid "keyboard label|KP_Up" +-#~ msgstr "ལྡེ་གདན་ཡར།(_U)" ++#~ msgstr "ལྡེ་གདན་ཡར།" + + #~ msgid "keyboard label|KP_Right" +-#~ msgstr "ལྡེ་གདན་གཡས།(_R)" ++#~ msgstr "ལྡེ་གདན་གཡས།" + + #~ msgid "keyboard label|KP_Down" +-#~ msgstr "ལྡེ་གདན་མར།(_D)" ++#~ msgstr "ལྡེ་གདན་མར།" + + #~ msgid "keyboard label|KP_Page_Up" +-#~ msgstr "ལྡེ་གདན་ཤོག་ལེབ་ཡར།(_U)" ++#~ msgstr "ལྡེ་གདན་ཤོག་ལེབ་ཡར།" + + #~ msgid "keyboard label|KP_Prior" +-#~ msgstr "ལྡེ་གདན་སྔོན(_P)" ++#~ msgstr "ལྡེ་གདན་སྔོན" + + #~ msgid "keyboard label|KP_Next" +-#~ msgstr "ལྡེ་གདན་ཤུལ་མམ།(_N)" ++#~ msgstr "ལྡེ་གདན་ཤུལ་མམ།" + + #~ msgid "keyboard label|KP_End" +-#~ msgstr "ལྡེ་གདན་མཇུག།(_E)" ++#~ msgstr "ལྡེ་གདན་མཇུག།" + + #~ msgid "keyboard label|KP_Begin" +-#~ msgstr "ལྡེ་གདན་འགོ་བཙུགས།(_B)" ++#~ msgstr "ལྡེ་གདན་འགོ་བཙུགས།" + + #~ msgid "keyboard label|KP_Insert" +-#~ msgstr "ལྡེ་གདན་བཙུགས།(_I)" ++#~ msgstr "ལྡེ་གདན་བཙུགས།" + + #~ msgid "keyboard label|KP_Delete" +-#~ msgstr "ལྡེ་གདན་བཏོན་གཏང་།(_N)" ++#~ msgstr "ལྡེ་གདན་བཏོན་གཏང་།" + + #~ msgid "keyboard label|Delete" + #~ msgstr "བཏོན།" +@@ -5597,52 +5597,52 @@ + #~ msgstr "རྫོགས་སོ།" + + #~ msgid "Navigation|_Bottom" +-#~ msgstr "མཇུག(_B)" ++#~ msgstr "མཇུག" + + #~ msgid "Navigation|_First" +-#~ msgstr "དང་པ།(_F)" ++#~ msgstr "དང་པ།" + + #~ msgid "Navigation|_Last" +-#~ msgstr "མཇུག་མམ།(_L)" ++#~ msgstr "མཇུག་མམ།" + + #~ msgid "Navigation|_Top" +-#~ msgstr "མགོ(_T)" ++#~ msgstr "མགོ" + + #~ msgid "Navigation|_Back" +-#~ msgstr "རྒྱབ་བསྐྱོད།(_B)" ++#~ msgstr "རྒྱབ་བསྐྱོད།" + + #~ msgid "Navigation|_Down" +-#~ msgstr "མར།(_D)" ++#~ msgstr "མར།" + + #~ msgid "Navigation|_Forward" +-#~ msgstr "གདོང་བསྐྱོད།(_F)" ++#~ msgstr "གདོང་བསྐྱོད།" + + #~ msgid "Navigation|_Up" +-#~ msgstr "ཡར།(_U)" ++#~ msgstr "ཡར།" + + #~ msgid "Justify|_Center" +-#~ msgstr "དབུས།(_C)" ++#~ msgstr "དབུས།" + + #~ msgid "Justify|_Fill" + #~ msgstr "བཀང་།(F)" + + #~ msgid "Justify|_Left" +-#~ msgstr "གཡོན།(_L)" ++#~ msgstr "གཡོན།" + + #~ msgid "Justify|_Right" +-#~ msgstr "གཡས།(_R)" ++#~ msgstr "གཡས།" + + #~ msgid "Media|_Next" +-#~ msgstr "ཤུལ་མམ།(_N)" ++#~ msgstr "ཤུལ་མམ།" + + #~ msgid "Media|P_ause" + #~ msgstr "ཐེམ།(_a)" + + #~ msgid "Media|_Play" +-#~ msgstr "གཏང་།(_P)" ++#~ msgstr "གཏང་།" + + #~ msgid "Media|_Stop" +-#~ msgstr "བཀག(_S)" ++#~ msgstr "བཀག" + + #~ msgid "paper size|asme_f" + #~ msgstr "ཨེསི་མེཕ།(_f)" +@@ -6205,14 +6205,14 @@ + #~ msgstr "སྔོན་སྒྲིག" + + #~ msgid "_All" +-#~ msgstr "ཆ་མཉམ།(_A)" ++#~ msgstr "ཆ་མཉམ།" + + #~ msgid "Today" + #~ msgstr "ད་རིས།" + + #, fuzzy + #~ msgid "Location:" +-#~ msgstr "གནས་ཁོངས་:(_L)" ++#~ msgstr "གནས་ཁོངས་:" + + #~ msgid "PNM image format is invalid" + #~ msgstr "པི་ཨེན་ཨེམ་ གཟུགས་བརྙན་གྱི་རྩ་སྒྲིག་ ནུས་མེད་ཨིན་པས།" +@@ -6363,7 +6363,7 @@ + #~ msgstr "པར་ཁྲའི་འགྲུལ་ལམ་ཆ་ཤས་ \"%s\" དེ་ ཡང་དག་དགོ་མི་དེ་ཡང་ %s འབྲེལ་ལམ་ %d ཨིན།" + + #~ msgid "_Credits" +-#~ msgstr "ངོ་བསྟོད།(_C)" ++#~ msgstr "ངོ་བསྟོད།" + + #~ msgid "" + #~ "Could not change the current folder to %s:\n" +diff -urN a/po/gu.po b/po/gu.po +--- a/po/gu.po 2025-06-09 19:54:59.509434543 -0700 ++++ b/po/gu.po 2025-06-09 20:11:48.788737237 -0700 +@@ -145,12 +145,12 @@ + #: ../gdk/keyname-table.h:6847 + msgctxt "keyboard label" + msgid "Scroll_Lock" +-msgstr "ScrollLock (_L)" ++msgstr "ScrollLock" + + #: ../gdk/keyname-table.h:6848 + msgctxt "keyboard label" + msgid "Sys_Req" +-msgstr "SysReq (_R)" ++msgstr "SysReq" + + #: ../gdk/keyname-table.h:6849 + msgctxt "keyboard label" +@@ -190,12 +190,12 @@ + #: ../gdk/keyname-table.h:6856 + msgctxt "keyboard label" + msgid "Page_Up" +-msgstr "Page Up (_U)" ++msgstr "Page Up" + + #: ../gdk/keyname-table.h:6857 + msgctxt "keyboard label" + msgid "Page_Down" +-msgstr "Page Down (_D)" ++msgstr "Page Down" + + #: ../gdk/keyname-table.h:6858 + msgctxt "keyboard label" +@@ -220,7 +220,7 @@ + #: ../gdk/keyname-table.h:6862 + msgctxt "keyboard label" + msgid "Num_Lock" +-msgstr "NumLock (_L)" ++msgstr "NumLock" + + #. Translators: KP_ means 'key pad' here + #: ../gdk/keyname-table.h:6864 +@@ -606,32 +606,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "વિશે (_A)" ++msgstr "વિશે" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "ઉમેરો (_A)" ++msgstr "ઉમેરો" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "ઘટ્ટ (_B)" ++msgstr "ઘટ્ટ" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "CD-ROM (_C)" ++msgstr "CD-ROM" + + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "સાફ કરો (_C)" ++msgstr "સાફ કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "બંધ કરો (_C)" ++msgstr "બંધ કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -648,7 +648,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "નકલ કરો (_C)" ++msgstr "નકલ કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -658,7 +658,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "કાઢી નાંખો (_D)" ++msgstr "કાઢી નાંખો" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -684,95 +684,95 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ચલાવો (_E)" ++msgstr "ચલાવો" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "ફાઈલ (_F)" ++msgstr "ફાઈલ" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "શોધો (_F)" ++msgstr "શોધો" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "શોધો અને બદલો (_R)" ++msgstr "શોધો અને બદલો" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ફ્લોપી (_F)" ++msgstr "ફ્લોપી" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "પૂર્ણ સ્ક્રીન (_F)" ++msgstr "પૂર્ણ સ્ક્રીન" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "તળિયું (_B)" ++msgstr "તળિયું" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "પહેલુ (_F)" ++msgstr "પહેલુ" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "છેલ્લુ (_L)" ++msgstr "છેલ્લુ" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ટોચ (_T)" ++msgstr "ટોચ" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "પાછળ કરો (_B)" ++msgstr "પાછળ કરો" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "નીચે કરો (_D)" ++msgstr "નીચે કરો" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "આગળ ધપાવો (_F)" ++msgstr "આગળ ધપાવો" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ઉપર કરો (_U)" ++msgstr "ઉપર કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "હાર્ડ ડિસ્ક (_H)" ++msgstr "હાર્ડ ડિસ્ક" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "મદદ (_H)" ++msgstr "મદદ" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ઘર (_H)" ++msgstr "ઘર" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -782,58 +782,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "જાણકારી (_I)" ++msgstr "જાણકારી" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ઇટાલિક (_I)" ++msgstr "ઇટાલિક" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "અહીં કૂદકો મારો (_J)" ++msgstr "અહીં કૂદકો મારો" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "કેન્દ્ર (_C)" ++msgstr "કેન્દ્ર" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ભરો (_F)" ++msgstr "ભરો" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "ડાબું (_L)" ++msgstr "ડાબું" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "જમણું (_R)" ++msgstr "જમણું" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "પૂર્ણ સ્ક્રીન છોડો (_L)" ++msgstr "પૂર્ણ સ્ક્રીન છોડો" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "આગળ ધપાવો (_F)" ++msgstr "આગળ ધપાવો" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "પછી (_N)" ++msgstr "પછી" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -845,7 +845,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "ચલાવો (_P)" ++msgstr "ચલાવો" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -857,7 +857,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "રેકોર્ડ (_R)" ++msgstr "રેકોર્ડ" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -869,32 +869,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "થોભો (_S)" ++msgstr "થોભો" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "નેટવર્ક (_N)" ++msgstr "નેટવર્ક" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "નવું (_N)" ++msgstr "નવું" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "ખોલો (_O)" ++msgstr "ખોલો" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "ચોંટાડો (_P)" ++msgstr "ચોંટાડો" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "છાપો (_P)" ++msgstr "છાપો" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -904,86 +904,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "ગુણધર્મો (_P)" ++msgstr "ગુણધર્મો" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "બહાર નીકળો (_Q)" ++msgstr "બહાર નીકળો" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "ફરીથી કરો (_R)" ++msgstr "ફરીથી કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ફરી તાજુ કરો (_R)" ++msgstr "ફરી તાજુ કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "દૂર કરો (_R)" ++msgstr "દૂર કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "ઉલટાવો (_R)" ++msgstr "ઉલટાવો" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "સંગ્રહ કરો (_S)" ++msgstr "સંગ્રહ કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "આ રીતે સંગ્રહ કરો (_A)" ++msgstr "આ રીતે સંગ્રહ કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "બધું પસંદ કરો (_A)" ++msgstr "બધું પસંદ કરો" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ચડતાક્રમમાં (_A)" ++msgstr "ચડતાક્રમમાં" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "ઊતરતાક્રમમાં (_D)" ++msgstr "ઊતરતાક્રમમાં" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "જોડણી ચકાસો (_S)" ++msgstr "જોડણી ચકાસો" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "થોભો (_S)" ++msgstr "થોભો" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "ચેકી નાખો (_S)" ++msgstr "ચેકી નાખો" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "નીચે લીટી કરો (_U)" ++msgstr "નીચે લીટી કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "છેલ્લી ક્રિયા રદ કરો (_U)" ++msgstr "છેલ્લી ક્રિયા રદ કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -994,23 +994,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "સામાન્ય માપ (_N)" ++msgstr "સામાન્ય માપ" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "શ્રેષ્ઠ રીતે બંધબેસતુ (_F)" ++msgstr "શ્રેષ્ઠ રીતે બંધબેસતુ" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "મોટું કરો (_I)" ++msgstr "મોટું કરો" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "નાનું કરો (_O)" ++msgstr "નાનું કરો" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1067,7 +1067,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "વર્ણ (_H):" ++msgstr "વર્ણ:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1083,7 +1083,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "કિંમત (_V):" ++msgstr "કિંમત:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1091,7 +1091,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "લાલ (_R):" ++msgstr "લાલ:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1099,7 +1099,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "લીલું (_G):" ++msgstr "લીલું:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1107,7 +1107,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "વાદળી (_B):" ++msgstr "વાદળી:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1135,7 +1135,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "પેલેટ (_P):" ++msgstr "પેલેટ:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1171,7 +1171,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "રંગનો અહીં સંગ્રહ કરો (_S)" ++msgstr "રંગનો અહીં સંગ્રહ કરો" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1194,7 +1194,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "રદ કરો (_C)" ++msgstr "રદ કરો" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1202,11 +1202,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "પસંદ કરો (_S)" ++msgstr "પસંદ કરો" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "મદદ (_H)" ++msgstr "મદદ" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1220,11 +1220,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "કુટુંબ (_F):" ++msgstr "કુટુંબ:" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "શૈલી (_S):" ++msgstr "શૈલી:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1233,18 +1233,18 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "પૂર્વ દર્શન (_P):" ++msgstr "પૂર્વ દર્શન:" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "અમલમાં મૂકો (_A)" ++msgstr "અમલમાં મૂકો" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11638 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "બરાબર (_O)" ++msgstr "બરાબર" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1262,12 +1262,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "અમલમાં મૂકો (_A)" ++msgstr "અમલમાં મૂકો" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "રદ કરો (_C)" ++msgstr "રદ કરો" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1277,37 +1277,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "રુપાંતર કરો (_C)" ++msgstr "રુપાંતર કરો" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "અવગણો (_D)" ++msgstr "અવગણો" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "જોડાણ તોડો (_D)" ++msgstr "જોડાણ તોડો" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "ફેરફાર કરો (_E)" ++msgstr "ફેરફાર કરો" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "અનુક્રમાંક (_I)" ++msgstr "અનુક્રમાંક" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "ના (_N)" ++msgstr "ના" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "બરાબર (_O)" ++msgstr "બરાબર" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1341,27 +1341,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "પસંદગીઓ (_P)" ++msgstr "પસંદગીઓ" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "રંગ (_C)" ++msgstr "રંગ" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ફોન્ટ (_F)" ++msgstr "ફોન્ટ" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "કાઢી નાખેલું પાછુ લાવો (_U)" ++msgstr "કાઢી નાખેલું પાછુ લાવો" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "હા (_Y)" ++msgstr "હા" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2034,7 +2034,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "વૈવિધ્યપૂર્ણ (_C)" ++msgstr "વૈવિધ્યપૂર્ણ" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2049,7 +2049,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "બંધ કરો (_C)" ++msgstr "બંધ કરો" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2075,11 +2075,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "પહોળાઈ (_W):" ++msgstr "પહોળાઈ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "ઊંચાઈ (_H):" ++msgstr "ઊંચાઈ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2087,19 +2087,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "ટોચ (_T):" ++msgstr "ટોચ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "તળિયું (_B):" ++msgstr "તળિયું:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "ડાબું (_L):" ++msgstr "ડાબું:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "જમણું (_R):" ++msgstr "જમણું:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2113,20 +2113,20 @@ + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "નકલ કરો (_C)" ++msgstr "નકલ કરો" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "ચોંટાડો (_P)" ++msgstr "ચોંટાડો" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "કાઢી નાંખો (_D)" ++msgstr "કાઢી નાંખો" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "બધું પસંદ કરો (_A)" ++msgstr "બધું પસંદ કરો" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2147,7 +2147,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3269 + msgid "_Open" +-msgstr "ખોલો (_O)" ++msgstr "ખોલો" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2224,28 +2224,28 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "ફાઇલની મુલાકાત લો (_V)" ++msgstr "ફાઇલની મુલાકાત લો" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +-msgstr "સ્થાનની નકલ કરો (_C)" ++msgstr "સ્થાનની નકલ કરો" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "બુકમાર્કોમાં ઉમેરો (_A)" ++msgstr "બુકમાર્કોમાં ઉમેરો" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "છુપી ફાઈલો બતાવો (_H)" ++msgstr "છુપી ફાઈલો બતાવો" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "સ્તંભ નું માપ બતાવો (_S)" ++msgstr "સ્તંભ નું માપ બતાવો" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "નામ (_N):" ++msgstr "નામ:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2296,7 +2296,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "બદલો (_R)" ++msgstr "બદલો" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2396,12 +2396,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "કડીને ખોલો (_O)" ++msgstr "કડીને ખોલો" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "કડી સરનામાંની નકલ કરો (_L)" ++msgstr "કડી સરનામાંની નકલ કરો" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2546,11 +2546,11 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "ના (_N)" ++msgstr "ના" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "હા (_Y)" ++msgstr "હા" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2562,7 +2562,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "અનામિક (_A)" ++msgstr "અનામિક" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2570,15 +2570,15 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "વપરાશકર્તાનામ (_U)" ++msgstr "વપરાશકર્તાનામ" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "ડોમેઇન (_D)" ++msgstr "ડોમેઇન" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "પાસવર્ડ (_P)" ++msgstr "પાસવર્ડ" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +@@ -2603,7 +2603,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "પ્રક્રિયાનો અંત લાવો (_E)" ++msgstr "પ્રક્રિયાનો અંત લાવો" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2768,45 +2768,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2226 ../gtk/gtkplacessidebar.c:3347 + msgid "_Start" +-msgstr "શરૂ કરો (_S)" ++msgstr "શરૂ કરો" + + #: ../gtk/gtkplacessidebar.c:2227 ../gtk/gtkplacessidebar.c:3354 + msgid "_Stop" +-msgstr "બંધ કરો (_S)" ++msgstr "બંધ કરો" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2234 + msgid "_Power On" +-msgstr "પાવર ચાલુ કરો (_P)" ++msgstr "પાવર ચાલુ કરો" + + #: ../gtk/gtkplacessidebar.c:2235 + msgid "_Safely Remove Drive" +-msgstr "ડ્રાઇવને સલામત રીતે દૂર કરો (_S)" ++msgstr "ડ્રાઇવને સલામત રીતે દૂર કરો" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Connect Drive" +-msgstr "ડ્રાઇવને જોડો (_C)" ++msgstr "ડ્રાઇવને જોડો" + + #: ../gtk/gtkplacessidebar.c:2240 + msgid "_Disconnect Drive" +-msgstr "ડ્રાઇવનું જોડાણ તોડો (_D)" ++msgstr "ડ્રાઇવનું જોડાણ તોડો" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Start Multi-disk Device" +-msgstr "મલ્ટી-ડિસ્ક ઉપકરણને શરૂ કરો (_S)" ++msgstr "મલ્ટી-ડિસ્ક ઉપકરણને શરૂ કરો" + + #: ../gtk/gtkplacessidebar.c:2245 + msgid "_Stop Multi-disk Device" +-msgstr "મલ્ટી-ડિસ્ક ઉપકરણને બંધ કરો (_S)" ++msgstr "મલ્ટી-ડિસ્ક ઉપકરણને બંધ કરો" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2250 + msgid "_Unlock Drive" +-msgstr "ડ્રાઇવનું તાળુ ખોલો (_U)" ++msgstr "ડ્રાઇવનું તાળુ ખોલો" + + #: ../gtk/gtkplacessidebar.c:2251 + msgid "_Lock Drive" +-msgstr "ડ્રાઇવનું તાળુ મારો (_L)" ++msgstr "ડ્રાઇવનું તાળુ મારો" + + #: ../gtk/gtkplacessidebar.c:2280 ../gtk/gtkplacessidebar.c:3029 + #, c-format +@@ -2841,15 +2841,15 @@ + + #: ../gtk/gtkplacessidebar.c:3277 + msgid "Open in New _Tab" +-msgstr "નવી ટૅબમાં ખોલો (_T)" ++msgstr "નવી ટૅબમાં ખોલો" + + #: ../gtk/gtkplacessidebar.c:3286 + msgid "Open in New _Window" +-msgstr "નવી વિન્ડોમાં ખોલો (_W)" ++msgstr "નવી વિન્ડોમાં ખોલો" + + #: ../gtk/gtkplacessidebar.c:3295 + msgid "_Add Bookmark" +-msgstr "બુકમાર્ક ઉમેરો (_A)" ++msgstr "બુકમાર્ક ઉમેરો" + + #: ../gtk/gtkplacessidebar.c:3301 + msgid "Remove" +@@ -2861,19 +2861,19 @@ + + #: ../gtk/gtkplacessidebar.c:3319 + msgid "_Mount" +-msgstr "માઉન્ટ (_M)" ++msgstr "માઉન્ટ" + + #: ../gtk/gtkplacessidebar.c:3326 + msgid "_Unmount" +-msgstr "અનમાઉન્ટ (_U)" ++msgstr "અનમાઉન્ટ" + + #: ../gtk/gtkplacessidebar.c:3333 + msgid "_Eject" +-msgstr "બહાર કાઢો (_E)" ++msgstr "બહાર કાઢો" + + #: ../gtk/gtkplacessidebar.c:3340 + msgid "_Detect Media" +-msgstr "મીડિયાને શોધો (_D)" ++msgstr "મીડિયાને શોધો" + + #: ../gtk/gtkplacessidebar.c:3946 + msgid "Computer" +@@ -2885,7 +2885,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "પાસવર્ડ યાદ રાખો (_R)" ++msgstr "પાસવર્ડ યાદ રાખો" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3036,7 +3036,7 @@ + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "છાપો (_P)" ++msgstr "છાપો" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3139,19 +3139,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "સ્થાનની નકલ કરો (_L)" ++msgstr "સ્થાનની નકલ કરો" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "યાદીમાંથી દૂર કરો (_R)" ++msgstr "યાદીમાંથી દૂર કરો" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "યાદી સાફ કરો (_C)" ++msgstr "યાદી સાફ કરો" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "ખાનગી સ્રોતો બતાવો (_P)" ++msgstr "ખાનગી સ્રોતો બતાવો" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3349,11 +3349,11 @@ + + #: ../gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM ડાબેથી-જમણાની નિશાની (_L)" ++msgstr "LRM ડાબેથી-જમણાની નિશાની" + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM જમણેથી-ડાબેથી નિશાની (_R)" ++msgstr "RLM જમણેથી-ડાબેથી નિશાની" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3377,7 +3377,7 @@ + + #: ../gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS શૂન્ય પહોળાઈ (_Z)" ++msgstr "ZWS શૂન્ય પહોળાઈ" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +@@ -3498,7 +3498,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "સંગ્રહ કરો (_S)" ++msgstr "સંગ્રહ કરો" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -5278,7 +5278,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "આઉટપુટ બંધારણ (_O)" ++msgstr "આઉટપુટ બંધારણ" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5337,12 +5337,12 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "બધા કાર્યક્રમો જુઓ (_V)" ++msgstr "બધા કાર્યક્રમો જુઓ" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + #| msgid "_Find applications online" + msgid "_Find New Applications" +-msgstr "નવાં કાર્યક્રમોને શોધો (_F)" ++msgstr "નવાં કાર્યક્રમોને શોધો" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5377,15 +5377,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "આગળ (_N)" ++msgstr "આગળ" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "પાછળ (_B)" ++msgstr "પાછળ" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "સમાપ્ત (_F)" ++msgstr "સમાપ્ત" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5429,11 +5429,11 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:1 + msgid "Create Fo_lder" +-msgstr "ફોલ્ડર બનાવો (_F)" ++msgstr "ફોલ્ડર બનાવો" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "સ્થાન (_L):" ++msgstr "સ્થાન:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5471,16 +5471,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "માટેનું બંધારણ (_F):" ++msgstr "માટેનું બંધારણ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "કાગળ માપ (_P):" ++msgstr "કાગળ માપ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "દિશા (_O):" ++msgstr "દિશા:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5525,7 +5525,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "બધા પાનાંઓ (_A)" ++msgstr "બધા પાનાંઓ" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5567,7 +5567,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "ઉલટાવો (_R)" ++msgstr "ઉલટાવો" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5587,7 +5587,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "માત્ર છાપો (_O):" ++msgstr "માત્ર છાપો:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5635,7 +5635,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "બીલ જાણકારી (_B):" ++msgstr "બીલ જાણકારી:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5644,7 +5644,7 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "હમણાં (_N)" ++msgstr "હમણાં" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 +@@ -5690,7 +5690,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "પછી (_A):" ++msgstr "પછી:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5761,7 +5761,7 @@ + #~ msgstr "યશ (_r)" + + #~ msgid "_License" +-#~ msgstr "લાયસન્સ (_L)" ++#~ msgstr "લાયસન્સ" + + #~ msgid "Homepage" + #~ msgstr "ઘરપાનું" +@@ -5804,10 +5804,10 @@ + #~ msgstr "ચાલુ રાખો (_o)" + + #~ msgid "Input _Methods" +-#~ msgstr "ઈનપુટ પધ્ધતિઓ (_M)" ++#~ msgstr "ઈનપુટ પધ્ધતિઓ" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "યૂનિકોડ નિયંત્રણ અક્ષર ઉમેરો (_I)" ++#~ msgstr "યૂનિકોડ નિયંત્રણ અક્ષર ઉમેરો" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "ફાઈલ વિશે જાણકારી મેળવી શક્યા નહિં" +@@ -5840,13 +5840,13 @@ + #~ msgstr "જગ્યાઓ" + + #~ msgid "_Places" +-#~ msgstr "જગ્યાઓ (_P)" ++#~ msgstr "જગ્યાઓ" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "પસંદિત ફોલ્ડરને બુકમાર્કોમાં ઉમેરો" + + #~ msgid "_Copy file’s location" +-#~ msgstr "ફાઇલનાં સ્થાનની નકલ કરો (_C)" ++#~ msgstr "ફાઇલનાં સ્થાનની નકલ કરો" + + #~ msgid "Type a file name" + #~ msgstr "ફાઈલ નામ લખો" +@@ -5861,10 +5861,10 @@ + #~ msgstr "શોધો:" + + #~ msgid "Save in _folder:" +-#~ msgstr "ફોલ્ડરમાં સંગ્રહ કરો (_F):" ++#~ msgstr "ફોલ્ડરમાં સંગ્રહ કરો:" + + #~ msgid "Create in _folder:" +-#~ msgstr "ફોલ્ડરમાં બનાવો (_F):" ++#~ msgstr "ફોલ્ડરમાં બનાવો:" + + #~ msgid "Shortcut %s already exists" + #~ msgstr "ટૂંકાણ %s પહેલાથી જ અસ્તિત્વમાં છે" +@@ -5885,7 +5885,7 @@ + #~ msgstr "ફોલ્ડર પસંદ કરો" + + #~ msgid "_Save in folder:" +-#~ msgstr "ફોલ્ડરમાં સંગ્રહ કરો (_S):" ++#~ msgstr "ફોલ્ડરમાં સંગ્રહ કરો:" + + #~ msgid "Caps Lock and Num Lock are on" + #~ msgstr "Caps Lock અને Num Lock ચાલુ છે" +@@ -5909,13 +5909,13 @@ + #~ msgstr "અયોગ્ય રંગની માહિતી મળી\n" + + #~ msgid "_Add" +-#~ msgstr "ઉમેરો (_A)" ++#~ msgstr "ઉમેરો" + + #~ msgid "_Remove" +-#~ msgstr "દૂર કરો (_R)" ++#~ msgstr "દૂર કરો" + + #~ msgid "_Browse for other folders" +-#~ msgstr "બીજા ફોલ્ડરો માટે શોધો (_B)" ++#~ msgstr "બીજા ફોલ્ડરો માટે શોધો" + + #~ msgid "Invalid path" + #~ msgstr "અયોગ્ય પાથ" +diff -urN a/po/hi.po b/po/hi.po +--- a/po/hi.po 2025-06-09 20:05:32.415563671 -0700 ++++ b/po/hi.po 2025-06-09 20:11:49.136741755 -0700 +@@ -589,34 +589,34 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "परिचय (_A)" ++msgstr "परिचय" + + # FIXME these need accelerators when appropriate, and + # * need the mnemonics to be rationalized + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "जोड़ें (_A)" ++msgstr "जोड़ें" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "गहरा (_B)" ++msgstr "गहरा" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "सीडी-रोम (_C)" ++msgstr "सीडी-रोम" + + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "साफ़ करें (_C)" ++msgstr "साफ़ करें" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "बंद करें (_C)" ++msgstr "बंद करें" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -633,7 +633,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "नक़ल करें (_C)" ++msgstr "नक़ल करें" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -643,7 +643,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "मिटाएँ (_D)" ++msgstr "मिटाएँ" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -670,95 +670,95 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "चलाएँ (_E)" ++msgstr "चलाएँ" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "फ़ाइल (_F)" ++msgstr "फ़ाइल" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "ढूँढें (_F)" ++msgstr "ढूँढें" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ढूँढें और बदलें (_R)" ++msgstr "ढूँढें और बदलें" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "फ्लॉपी (_F)" ++msgstr "फ्लॉपी" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "पूर्ण स्क्रीन (_F)" ++msgstr "पूर्ण स्क्रीन" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "तल (_B):" ++msgstr "तल:" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "पहला (_F)" ++msgstr "पहला" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "अंतिम (_L)" ++msgstr "अंतिम" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "शीर्ष (_T):" ++msgstr "शीर्ष:" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "पीछे (_B)" ++msgstr "पीछे" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "नीचे (_D)" ++msgstr "नीचे" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "आगे (_F)" ++msgstr "आगे" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ऊपर (_U)" ++msgstr "ऊपर" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "हार्ड डिस्क (_H)" ++msgstr "हार्ड डिस्क" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "मदद (_H)" ++msgstr "मदद" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "घर (_H)" ++msgstr "घर" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -769,58 +769,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "सूचना (_I)" ++msgstr "सूचना" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "तिरछा (_I)" ++msgstr "तिरछा" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "यहाँ जाएँ (_J)" ++msgstr "यहाँ जाएँ" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "केंद्र (_C)" ++msgstr "केंद्र" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "भरें (_F)" ++msgstr "भरें" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "बायाँ (_L)" ++msgstr "बायाँ" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "दाहिना (_R)" ++msgstr "दाहिना" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "पूर्ण स्क्रीन छोड़ें (_L)" ++msgstr "पूर्ण स्क्रीन छोड़ें" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "आगे (_F)" ++msgstr "आगे" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "आगे (_N)" ++msgstr "आगे" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -832,7 +832,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "बजाएँ (_P)" ++msgstr "बजाएँ" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -844,7 +844,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "रिकार्ड (_R)" ++msgstr "रिकार्ड" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -856,32 +856,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "रोकें (_S)" ++msgstr "रोकें" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "संजाल (_N)" ++msgstr "संजाल" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "नया (_N)" ++msgstr "नया" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "खोलें (_O)" ++msgstr "खोलें" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "चिपकाएँ (_P)" ++msgstr "चिपकाएँ" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "छापें (_P)" ++msgstr "छापें" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -891,86 +891,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "गुण (_P)" ++msgstr "गुण" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "बाहर जाएँ (_Q)" ++msgstr "बाहर जाएँ" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "फिर करें (_R)" ++msgstr "फिर करें" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ताज़ा करें (_R)" ++msgstr "ताज़ा करें" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "हटाएँ (_R)" ++msgstr "हटाएँ" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "पुरानी स्थिति लौटाएँ (_R)" ++msgstr "पुरानी स्थिति लौटाएँ" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "सहेजें (_S)" ++msgstr "सहेजें" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "ऐसे सहेजें (_A)" ++msgstr "ऐसे सहेजें" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "सभी चुनें (_A)" ++msgstr "सभी चुनें" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "आरोही क्रम में (_A)" ++msgstr "आरोही क्रम में" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "अवरोही क्रम में (_D)" ++msgstr "अवरोही क्रम में" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "वर्तनी जाँच (_S)" ++msgstr "वर्तनी जाँच" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "रोकें (_S)" ++msgstr "रोकें" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "आर-पार काटें (_S)" ++msgstr "आर-पार काटें" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "रेखांकित (_U)" ++msgstr "रेखांकित" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "पहले जैसा (_U)" ++msgstr "पहले जैसा" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -981,23 +981,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "सामान्य आकार (_N)" ++msgstr "सामान्य आकार" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "सर्वोत्तम फिट (_F)" ++msgstr "सर्वोत्तम फिट" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "बड़ा करें (_I)" ++msgstr "बड़ा करें" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "छोटा करें (_O)" ++msgstr "छोटा करें" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1056,7 +1056,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "वर्ण (_H):" ++msgstr "वर्ण:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1072,7 +1072,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "मान (_V):" ++msgstr "मान:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1080,7 +1080,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "लाल (_R):" ++msgstr "लाल:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1088,7 +1088,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "हरा (_G):" ++msgstr "हरा:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1096,7 +1096,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "नीला (_B):" ++msgstr "नीला:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1125,7 +1125,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "रंग-पट्टिका (_P):" ++msgstr "रंग-पट्टिका:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1161,7 +1161,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "रंग यहाँ सहेजें (_S)" ++msgstr "रंग यहाँ सहेजें" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1186,7 +1186,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "रद्द करें (_C)" ++msgstr "रद्द करें" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1194,11 +1194,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "चुनें (_S)" ++msgstr "चुनें" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "मदद (_H)" ++msgstr "मदद" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1214,11 +1214,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "परिवारः (_F)" ++msgstr "परिवारः" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "शैली (_S):" ++msgstr "शैली:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1228,18 +1228,18 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "पूर्वावलोकनः (_P)" ++msgstr "पूर्वावलोकनः" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "लागू करें (_A)" ++msgstr "लागू करें" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11661 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "ठीक (_O)" ++msgstr "ठीक" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1257,12 +1257,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "लागू करें (_A)" ++msgstr "लागू करें" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "रद्द करें (_C)" ++msgstr "रद्द करें" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1272,37 +1272,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "बदलें (_C)" ++msgstr "बदलें" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "छोड़ें (_D)" ++msgstr "छोड़ें" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "डिस्कनेक्ट करें (_D)..." ++msgstr "डिस्कनेक्ट करें..." + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "संपादन (_E)" ++msgstr "संपादन" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "अनुक्रमणिका (_I)" ++msgstr "अनुक्रमणिका" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "नहीं (_N)" ++msgstr "नहीं" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ठीक (_O)" ++msgstr "ठीक" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1336,27 +1336,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "वरीयता (_P)" ++msgstr "वरीयता" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "रंग (_C)" ++msgstr "रंग" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "फ़ॉन्ट (_F)" ++msgstr "फ़ॉन्ट" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "मिटाया वापस लें (_U)" ++msgstr "मिटाया वापस लें" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "हाँ (_Y)" ++msgstr "हाँ" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2031,7 +2031,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "पसंदीदा करें (_C)" ++msgstr "पसंदीदा करें" + + # Translate to default:RTL if you want your widgets + # * to be RTL, otherwise translate to default:LTR. +@@ -2050,7 +2050,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "बंद करें (_C)" ++msgstr "बंद करें" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2076,11 +2076,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "चौड़ाई (_W):" ++msgstr "चौड़ाई:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "ऊँचाई (_H):" ++msgstr "ऊँचाई:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2088,19 +2088,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "शीर्ष (_T):" ++msgstr "शीर्ष:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "तल (_B):" ++msgstr "तल:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "बायाँ (_L):" ++msgstr "बायाँ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "दाहिना (_R):" ++msgstr "दाहिना:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2114,20 +2114,20 @@ + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "नक़ल करें (_C)" ++msgstr "नक़ल करें" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "चिपकाएँ (_P)" ++msgstr "चिपकाएँ" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "मिटाएँ (_D)" ++msgstr "मिटाएँ" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "सभी चुनें (_A)" ++msgstr "सभी चुनें" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2148,7 +2148,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3273 + msgid "_Open" +-msgstr "खोलें (_O)" ++msgstr "खोलें" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2221,7 +2221,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "फ़ाइल को देखें (_V)" ++msgstr "फ़ाइल को देखें" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +@@ -2229,21 +2229,21 @@ + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "एक पुस्तकचिह्न जोड़ें (_A)" ++msgstr "एक पुस्तकचिह्न जोड़ें" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "छुपे फ़ाइल दिखाएँ (_H)" ++msgstr "छुपे फ़ाइल दिखाएँ" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "आकार स्तंभ दिखाएँ (_S)" ++msgstr "आकार स्तंभ दिखाएँ" + + # Name entry + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "नाम (_N):" ++msgstr "नाम:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2295,7 +2295,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "बदलें (_R)" ++msgstr "बदलें" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2398,12 +2398,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "कड़ी खोलें (_O)" ++msgstr "कड़ी खोलें" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "कड़ी पता की नक़ल लें (_L)" ++msgstr "कड़ी पता की नक़ल लें" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2556,11 +2556,11 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "नहीं (_N)" ++msgstr "नहीं" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "हाँ (_Y)" ++msgstr "हाँ" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2572,7 +2572,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "बेनाम (_A)" ++msgstr "बेनाम" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2580,15 +2580,15 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "उपयोक्ता नाम (_U)" ++msgstr "उपयोक्ता नाम" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "डोमेन (_D)" ++msgstr "डोमेन" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "कूटशब्द (_P)" ++msgstr "कूटशब्द" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +@@ -2613,7 +2613,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "प्रक्रिया समाप्त करें (_E)" ++msgstr "प्रक्रिया समाप्त करें" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2776,45 +2776,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2230 ../gtk/gtkplacessidebar.c:3351 + msgid "_Start" +-msgstr "आरंभ करें (_S)" ++msgstr "आरंभ करें" + + #: ../gtk/gtkplacessidebar.c:2231 ../gtk/gtkplacessidebar.c:3358 + msgid "_Stop" +-msgstr "रोकें (_S)" ++msgstr "रोकें" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2238 + msgid "_Power On" +-msgstr "बिजली चालू (_P)" ++msgstr "बिजली चालू" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Safely Remove Drive" +-msgstr "ड्राइव सुरक्षित रूप से निकालें (_S)" ++msgstr "ड्राइव सुरक्षित रूप से निकालें" + + #: ../gtk/gtkplacessidebar.c:2243 + msgid "_Connect Drive" +-msgstr "ड्राइव कनेक्ट करें (_C)" ++msgstr "ड्राइव कनेक्ट करें" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Disconnect Drive" +-msgstr "ड्राइव डिसकनेक्ट करें (_D)" ++msgstr "ड्राइव डिसकनेक्ट करें" + + #: ../gtk/gtkplacessidebar.c:2248 + msgid "_Start Multi-disk Device" +-msgstr "मल्टी डिस्क युक्ति आरंभ करें (_S)" ++msgstr "मल्टी डिस्क युक्ति आरंभ करें" + + #: ../gtk/gtkplacessidebar.c:2249 + msgid "_Stop Multi-disk Device" +-msgstr "मल्टी डिस्क युक्ति रोकें (_S)" ++msgstr "मल्टी डिस्क युक्ति रोकें" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2254 + msgid "_Unlock Drive" +-msgstr "ड्राइव अनलॉक करें (_U)" ++msgstr "ड्राइव अनलॉक करें" + + #: ../gtk/gtkplacessidebar.c:2255 + msgid "_Lock Drive" +-msgstr "ड्राइव लॉक करें (_L)" ++msgstr "ड्राइव लॉक करें" + + #: ../gtk/gtkplacessidebar.c:2284 ../gtk/gtkplacessidebar.c:3033 + #, c-format +@@ -2849,15 +2849,15 @@ + + #: ../gtk/gtkplacessidebar.c:3281 + msgid "Open in New _Tab" +-msgstr "नए टैब में खोलें (_T)" ++msgstr "नए टैब में खोलें" + + #: ../gtk/gtkplacessidebar.c:3290 + msgid "Open in New _Window" +-msgstr "नए विंडो में खोलें (_W)" ++msgstr "नए विंडो में खोलें" + + #: ../gtk/gtkplacessidebar.c:3299 + msgid "_Add Bookmark" +-msgstr "पसंद जोड़ें (_A)" ++msgstr "पसंद जोड़ें" + + #: ../gtk/gtkplacessidebar.c:3305 + msgid "Remove" +@@ -2869,19 +2869,19 @@ + + #: ../gtk/gtkplacessidebar.c:3323 + msgid "_Mount" +-msgstr "आरोहित करें (_M)" ++msgstr "आरोहित करें" + + #: ../gtk/gtkplacessidebar.c:3330 + msgid "_Unmount" +-msgstr "अनारोहित करें (_U)" ++msgstr "अनारोहित करें" + + #: ../gtk/gtkplacessidebar.c:3337 + msgid "_Eject" +-msgstr "बाहर निकालें (_E)" ++msgstr "बाहर निकालें" + + #: ../gtk/gtkplacessidebar.c:3344 + msgid "_Detect Media" +-msgstr "मीडिया पता करें (_D)" ++msgstr "मीडिया पता करें" + + #: ../gtk/gtkplacessidebar.c:3953 + msgid "Computer" +@@ -2893,7 +2893,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "कूटशब्द याद रखें (_R)" ++msgstr "कूटशब्द याद रखें" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3045,7 +3045,7 @@ + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "छापें (_P)" ++msgstr "छापें" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3148,19 +3148,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "स्थान कॉपी करें (_L)" ++msgstr "स्थान कॉपी करें" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "सूची से हटाएँ (_R)" ++msgstr "सूची से हटाएँ" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "सूची साफ करें (_C)" ++msgstr "सूची साफ करें" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "निजी संसाधन दिखायें (_P)" ++msgstr "निजी संसाधन दिखायें" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3365,7 +3365,7 @@ + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM दाएँ-से-बाएँ चिह्न (_R)" ++msgstr "RLM दाएँ-से-बाएँ चिह्न" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3385,11 +3385,11 @@ + + #: ../gtk/gtktextutil.c:63 + msgid "PDF _Pop directional formatting" +-msgstr "पीडीएफ़ पॉप डायरेक्शनल फ़ॉर्मेटिंग (_P)" ++msgstr "पीडीएफ़ पॉप डायरेक्शनल फ़ॉर्मेटिंग" + + #: ../gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS शून्य चौड़ाई स्थान (_Z)" ++msgstr "ZWS शून्य चौड़ाई स्थान" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +@@ -3514,7 +3514,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "सहेजें (_S)" ++msgstr "सहेजें" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -5315,7 +5315,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "आउटपुट प्रारूप (_O)" ++msgstr "आउटपुट प्रारूप" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5374,11 +5374,11 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "सभी अनुप्रयोग देखें (_V)" ++msgstr "सभी अनुप्रयोग देखें" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + msgid "_Find New Applications" +-msgstr "नया अनुप्रयोग ढूँढ़ें (_F)" ++msgstr "नया अनुप्रयोग ढूँढ़ें" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5412,15 +5412,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "आगे (_N)" ++msgstr "आगे" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "पीछे (_B)" ++msgstr "पीछे" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "समाप्त (_F)" ++msgstr "समाप्त" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5469,7 +5469,7 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "स्थान (_L):" ++msgstr "स्थान:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5507,16 +5507,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "इसके लिये प्रारूप (_F):" ++msgstr "इसके लिये प्रारूप:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "कागज का आकार (_P):" ++msgstr "कागज का आकार:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "अभिमुखन (_O):" ++msgstr "अभिमुखन:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5561,7 +5561,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "सभी पृष्ठ (_A)" ++msgstr "सभी पृष्ठ" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5599,11 +5599,11 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:22 + msgid "C_ollate" +-msgstr "कोलेट करें (_C)" ++msgstr "कोलेट करें" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "उल्टा (_R)" ++msgstr "उल्टा" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5623,7 +5623,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "सिर्फ मुद्रण (_O):" ++msgstr "सिर्फ मुद्रण:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5671,7 +5671,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "बिलिंग सूचना (_B):" ++msgstr "बिलिंग सूचना:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5680,7 +5680,7 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "अब (_N)" ++msgstr "अब" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 +@@ -5726,7 +5726,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "के बाद (_A):" ++msgstr "के बाद:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5792,7 +5792,7 @@ + #~ msgstr "चालू और बंद स्थिति में स्विच करें" + + #~ msgid "_License" +-#~ msgstr "लाइसेंस (_L)" ++#~ msgstr "लाइसेंस" + + #~ msgid "Failed to look for applications online" + #~ msgstr "अनुप्रयोग के लिए ऑनलाइन देखने में विफल" +@@ -5829,7 +5829,7 @@ + #~ msgstr "इनपुट विधियाँ" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "यूनिकोड कन्ट्रोल कैरेक्टर प्रविष्ट करें (_I)" ++#~ msgstr "यूनिकोड कन्ट्रोल कैरेक्टर प्रविष्ट करें" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "फ़ाइल के बारे में सूचना नहीं पा सका" +@@ -5862,13 +5862,13 @@ + #~ msgstr "स्थान" + + #~ msgid "_Places" +-#~ msgstr "स्थान (_P)" ++#~ msgstr "स्थान" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "पुस्तकचिह्न में चुना हुआ फ़ोल्डर जोड़ें" + + #~ msgid "_Copy file’s location" +-#~ msgstr "फ़ाइल की अवस्थिति की नक़ल लें (_C)" ++#~ msgstr "फ़ाइल की अवस्थिति की नक़ल लें" + + #~ msgid "Type a file name" + #~ msgstr "फ़ाइल नाम टंकित करें" +@@ -5919,7 +5919,7 @@ + #~ msgstr "फोल्डर चुनें" + + #~ msgid "_Save in folder:" +-#~ msgstr "फ़ोल्डर में सहेजें (_S):" ++#~ msgstr "फ़ोल्डर में सहेजें:" + + #~ msgid "Received invalid color data\n" + #~ msgstr "अवैध रंग डेटा प्राप्त हुआ\n" +@@ -5928,7 +5928,7 @@ + #~ msgstr "Num Lock चालू है" + + #~ msgid "_Browse for other folders" +-#~ msgstr "अन्य फ़ोल्डर्स हेतु ब्राउज़ करें (_B)" ++#~ msgstr "अन्य फ़ोल्डर्स हेतु ब्राउज़ करें" + + #~ msgid "Invalid path" + #~ msgstr "अवैध पथ" +diff -urN a/po/ja.po b/po/ja.po +--- a/po/ja.po 2025-06-09 19:54:59.521434659 -0700 ++++ b/po/ja.po 2025-06-09 20:11:48.816737600 -0700 +@@ -657,32 +657,32 @@ + #: gtk/a11y/gtkimageaccessible.c:53 gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_About" +-msgstr "このアプリケーションについて(_A)" ++msgstr "このアプリケーションについて" + + #: gtk/a11y/gtkimageaccessible.c:54 gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Add" +-msgstr "追加(_A)" ++msgstr "追加" + + #: gtk/a11y/gtkimageaccessible.c:55 gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "太字(_B)" ++msgstr "太字" + + #: gtk/a11y/gtkimageaccessible.c:56 gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "CD-ROM(_C)" ++msgstr "CD-ROM" + + #: gtk/a11y/gtkimageaccessible.c:57 gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "クリア(_C)" ++msgstr "クリア" + + #: gtk/a11y/gtkimageaccessible.c:58 gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Close" +-msgstr "閉じる(_C)" ++msgstr "閉じる" + + #: gtk/a11y/gtkimageaccessible.c:59 gtk/gtkheaderbar.c:415 gtk/gtkwindow.c:9319 + msgid "Minimize" +@@ -699,17 +699,17 @@ + #: gtk/a11y/gtkimageaccessible.c:62 gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "コピー(_C)" ++msgstr "コピー" + + #: gtk/a11y/gtkimageaccessible.c:63 gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "Cu_t" +-msgstr "切り取り(_T)" ++msgstr "切り取り" + + #: gtk/a11y/gtkimageaccessible.c:64 gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "削除(_D)" ++msgstr "削除" + + #: gtk/a11y/gtkimageaccessible.c:65 gtk/deprecated/gtkstock.c:339 + msgctxt "Stock label" +@@ -735,95 +735,95 @@ + #: gtk/a11y/gtkimageaccessible.c:69 gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "実行(_E)" ++msgstr "実行" + + #: gtk/a11y/gtkimageaccessible.c:70 gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_File" +-msgstr "ファイル(_F)" ++msgstr "ファイル" + + #: gtk/a11y/gtkimageaccessible.c:71 gtk/deprecated/gtkstock.c:363 + msgctxt "Stock label" + msgid "_Find" +-msgstr "検索(_F)" ++msgstr "検索" + + #: gtk/a11y/gtkimageaccessible.c:72 gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "検索して置換(_R)" ++msgstr "検索して置換" + + #: gtk/a11y/gtkimageaccessible.c:73 gtk/deprecated/gtkstock.c:365 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "フロッピー(_F)" ++msgstr "フロッピー" + + #: gtk/a11y/gtkimageaccessible.c:74 gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "フルスクリーン(_F)" ++msgstr "フルスクリーン" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/a11y/gtkimageaccessible.c:75 gtk/deprecated/gtkstock.c:369 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "最後(_B)" ++msgstr "最後" + + #. This is a navigation label as in "go to the first page" + #: gtk/a11y/gtkimageaccessible.c:76 gtk/deprecated/gtkstock.c:371 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "先頭(_F)" ++msgstr "先頭" + + #. This is a navigation label as in "go to the last page" + #: gtk/a11y/gtkimageaccessible.c:77 gtk/deprecated/gtkstock.c:373 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "最後(_L)" ++msgstr "最後" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/a11y/gtkimageaccessible.c:78 gtk/deprecated/gtkstock.c:375 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "先頭(_T)" ++msgstr "先頭" + + #. This is a navigation label as in "go back" + #: gtk/a11y/gtkimageaccessible.c:79 gtk/deprecated/gtkstock.c:377 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "戻る(_B)" ++msgstr "戻る" + + #. This is a navigation label as in "go down" + #: gtk/a11y/gtkimageaccessible.c:80 gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "下へ(_D)" ++msgstr "下へ" + + #. This is a navigation label as in "go forward" + #: gtk/a11y/gtkimageaccessible.c:81 gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "進む(_F)" ++msgstr "進む" + + #. This is a navigation label as in "go up" + #: gtk/a11y/gtkimageaccessible.c:82 gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "上へ(_U)" ++msgstr "上へ" + + #: gtk/a11y/gtkimageaccessible.c:83 gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "ハードディスク(_H)" ++msgstr "ハードディスク" + + #: gtk/a11y/gtkimageaccessible.c:84 gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Help" +-msgstr "ヘルプ(_H)" ++msgstr "ヘルプ" + + #: gtk/a11y/gtkimageaccessible.c:85 gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ホーム(_H)" ++msgstr "ホーム" + + #: gtk/a11y/gtkimageaccessible.c:86 gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" +@@ -833,203 +833,203 @@ + #: gtk/a11y/gtkimageaccessible.c:87 gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "斜体(_I)" ++msgstr "斜体" + + #: gtk/a11y/gtkimageaccessible.c:88 gtk/deprecated/gtkstock.c:392 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "移動(_J)" ++msgstr "移動" + + #. This is about text justification, "centered text" + #: gtk/a11y/gtkimageaccessible.c:89 gtk/deprecated/gtkstock.c:394 + msgctxt "Stock label" + msgid "_Center" +-msgstr "中央寄せ(_C)" ++msgstr "中央寄せ" + + #. This is about text justification + #: gtk/a11y/gtkimageaccessible.c:90 gtk/deprecated/gtkstock.c:396 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "埋める(_F)" ++msgstr "埋める" + + #. This is about text justification, "left-justified text" + #: gtk/a11y/gtkimageaccessible.c:91 gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label" + msgid "_Left" +-msgstr "左寄せ(_L)" ++msgstr "左寄せ" + + #. This is about text justification, "right-justified text" + #: gtk/a11y/gtkimageaccessible.c:92 gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label" + msgid "_Right" +-msgstr "右寄せ(_R)" ++msgstr "右寄せ" + + #: gtk/a11y/gtkimageaccessible.c:93 gtk/deprecated/gtkstock.c:367 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "フルスクリーンの解除(_L)" ++msgstr "フルスクリーンの解除" + + #. Media label, as in "fast forward" + #: gtk/a11y/gtkimageaccessible.c:94 gtk/deprecated/gtkstock.c:403 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "早送り(_F)" ++msgstr "早送り" + + #. Media label, as in "next song" + #: gtk/a11y/gtkimageaccessible.c:95 gtk/deprecated/gtkstock.c:405 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "次(_N)" ++msgstr "次" + + #. Media label, as in "pause music" + #: gtk/a11y/gtkimageaccessible.c:96 gtk/deprecated/gtkstock.c:407 + msgctxt "Stock label, media" + msgid "P_ause" +-msgstr "一時停止(_A)" ++msgstr "一時停止" + + #. Media label, as in "play music" + #: gtk/a11y/gtkimageaccessible.c:97 gtk/deprecated/gtkstock.c:409 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "再生(_P)" ++msgstr "再生" + + #. Media label, as in "previous song" + #: gtk/a11y/gtkimageaccessible.c:98 gtk/deprecated/gtkstock.c:411 + msgctxt "Stock label, media" + msgid "Pre_vious" +-msgstr "前(_V)" ++msgstr "前" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:99 gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "録音(_R)" ++msgstr "録音" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:100 gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label, media" + msgid "R_ewind" +-msgstr "巻き戻し(_E)" ++msgstr "巻き戻し" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:101 gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #: gtk/a11y/gtkimageaccessible.c:102 gtk/deprecated/gtkstock.c:418 + msgctxt "Stock label" + msgid "_Network" +-msgstr "ネットワーク(_N)" ++msgstr "ネットワーク" + + #: gtk/a11y/gtkimageaccessible.c:103 gtk/deprecated/gtkstock.c:419 + msgctxt "Stock label" + msgid "_New" +-msgstr "新規(_N)" ++msgstr "新規" + + #: gtk/a11y/gtkimageaccessible.c:104 gtk/deprecated/gtkstock.c:422 + msgctxt "Stock label" + msgid "_Open" +-msgstr "開く(_O)" ++msgstr "開く" + + #: gtk/a11y/gtkimageaccessible.c:105 gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "貼り付け(_P)" ++msgstr "貼り付け" + + #: gtk/a11y/gtkimageaccessible.c:106 gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Print" +-msgstr "印刷(_P)" ++msgstr "印刷" + + #: gtk/a11y/gtkimageaccessible.c:107 gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "Print Pre_view" +-msgstr "印刷プレビュー(_V)" ++msgstr "印刷プレビュー" + + #: gtk/a11y/gtkimageaccessible.c:108 gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "プロパティ(_P)" ++msgstr "プロパティ" + + #: gtk/a11y/gtkimageaccessible.c:109 gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "終了(_Q)" ++msgstr "終了" + + #: gtk/a11y/gtkimageaccessible.c:110 gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "やり直す(_R)" ++msgstr "やり直す" + + #: gtk/a11y/gtkimageaccessible.c:111 gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "更新(_R)" ++msgstr "更新" + + #: gtk/a11y/gtkimageaccessible.c:112 gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "削除(_R)" ++msgstr "削除" + + #: gtk/a11y/gtkimageaccessible.c:113 gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "元に戻す(_R)" ++msgstr "元に戻す" + + #: gtk/a11y/gtkimageaccessible.c:114 gtk/deprecated/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Save" +-msgstr "保存(_S)" ++msgstr "保存" + + #: gtk/a11y/gtkimageaccessible.c:115 gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "名前を付けて保存(_A)" ++msgstr "名前を付けて保存" + + #: gtk/a11y/gtkimageaccessible.c:116 gtk/deprecated/gtkstock.c:444 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "すべて選択(_A)" ++msgstr "すべて選択" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:117 gtk/deprecated/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "昇順(_A)" ++msgstr "昇順" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:118 gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "降順(_D)" ++msgstr "降順" + + #: gtk/a11y/gtkimageaccessible.c:119 gtk/deprecated/gtkstock.c:451 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "スペルチェック(_S)" ++msgstr "スペルチェック" + + #: gtk/a11y/gtkimageaccessible.c:120 gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:121 gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "打ち消し線(_S)" ++msgstr "打ち消し線" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:122 gtk/deprecated/gtkstock.c:457 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "下線(_U)" ++msgstr "下線" + + #: gtk/a11y/gtkimageaccessible.c:123 gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "元に戻す(_U)" ++msgstr "元に戻す" + + #: gtk/a11y/gtkimageaccessible.c:124 gtk/deprecated/gtkstock.c:388 + msgctxt "Stock label" +@@ -1040,23 +1040,23 @@ + #: gtk/a11y/gtkimageaccessible.c:125 gtk/deprecated/gtkstock.c:461 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "標準サイズ(_N)" ++msgstr "標準サイズ" + + #. Zoom + #: gtk/a11y/gtkimageaccessible.c:126 gtk/deprecated/gtkstock.c:463 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "フィットさせる(_F)" ++msgstr "フィットさせる" + + #: gtk/a11y/gtkimageaccessible.c:127 gtk/deprecated/gtkstock.c:464 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "拡大(_I)" ++msgstr "拡大" + + #: gtk/a11y/gtkimageaccessible.c:128 gtk/deprecated/gtkstock.c:465 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "縮小(_O)" ++msgstr "縮小" + + #: gtk/a11y/gtkmenubuttonaccessible.c:102 gtk/inspector/window.ui:459 + msgid "Menu" +@@ -1118,7 +1118,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "色相(_H):" ++msgstr "色相:" + + #: gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -1126,7 +1126,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:464 + msgid "S_aturation:" +-msgstr "彩度(_A):" ++msgstr "彩度:" + + #: gtk/deprecated/gtkcolorsel.c:465 + msgid "Intensity of the color." +@@ -1134,7 +1134,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "明度(_V):" ++msgstr "明度:" + + #: gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -1142,7 +1142,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "赤(_R):" ++msgstr "赤:" + + #: gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -1150,7 +1150,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "緑(_G):" ++msgstr "緑:" + + #: gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -1158,7 +1158,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "青(_B):" ++msgstr "青:" + + #: gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -1166,7 +1166,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:476 + msgid "Op_acity:" +-msgstr "不透明度(_A):" ++msgstr "不透明度:" + + #: gtk/deprecated/gtkcolorsel.c:484 gtk/deprecated/gtkcolorsel.c:494 + msgid "Transparency of the color." +@@ -1174,7 +1174,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:501 + msgid "Color _name:" +-msgstr "色の名称(_N):" ++msgstr "色の名称:" + + #: gtk/deprecated/gtkcolorsel.c:516 + msgid "" +@@ -1186,7 +1186,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "パレット(_P):" ++msgstr "パレット:" + + #: gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -1222,7 +1222,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:1458 + msgid "_Save color here" +-msgstr "ここに色を保存する(_S)" ++msgstr "ここに色を保存する" + + #: gtk/deprecated/gtkcolorsel.c:1664 + msgid "" +@@ -1244,17 +1244,17 @@ + #: gtk/ui/gtkappchooserdialog.ui:61 gtk/ui/gtkassistant.ui:125 + #: gtk/ui/gtkcolorchooserdialog.ui:34 gtk/ui/gtkfontchooserdialog.ui:31 + msgid "_Cancel" +-msgstr "キャンセル(_C)" ++msgstr "キャンセル" + + #: gtk/deprecated/gtkcolorseldialog.c:195 gtk/gtkprinteroptionwidget.c:546 + #: gtk/ui/gtkappchooserdialog.ui:67 gtk/ui/gtkcolorchooserdialog.ui:40 + #: gtk/ui/gtkfontchooserdialog.ui:37 + msgid "_Select" +-msgstr "選択(_S)" ++msgstr "選択" + + #: gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "ヘルプ(_H)" ++msgstr "ヘルプ" + + #: gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1268,30 +1268,30 @@ + + #: gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "ファミリ(_F):" ++msgstr "ファミリ:" + + #: gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "スタイル(_S):" ++msgstr "スタイル:" + + #: gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +-msgstr "サイズ(_Z):" ++msgstr "サイズ:" + + #. create the text entry widget + #: gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "プレビュー(_P):" ++msgstr "プレビュー:" + + #: gtk/deprecated/gtkfontsel.c:1693 gtk/gtkpagesetupunixdialog.c:198 + #: gtk/ui/gtkassistant.ui:50 + msgid "_Apply" +-msgstr "適用(_A)" ++msgstr "適用" + + #: gtk/deprecated/gtkfontsel.c:1698 gtk/gtkmessagedialog.c:944 + #: gtk/gtkmessagedialog.c:966 gtk/gtkprintbackend.c:780 gtk/gtkwindow.c:12790 + msgid "_OK" +-msgstr "OK(_O)" ++msgstr "OK" + + #: gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1309,57 +1309,57 @@ + #: gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "適用(_A)" ++msgstr "適用" + + #: gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "キャンセル(_C)" ++msgstr "キャンセル" + + #: gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "C_onnect" +-msgstr "接続(_O)" ++msgstr "接続" + + #: gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "変換(_C)" ++msgstr "変換" + + #: gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "無効(_D)" ++msgstr "無効" + + #: gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "切断(_D)" ++msgstr "切断" + + #: gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "編集(_E)" ++msgstr "編集" + + #: gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Index" +-msgstr "インデックス(_I)" ++msgstr "インデックス" + + #: gtk/deprecated/gtkstock.c:390 + msgctxt "Stock label" + msgid "_Information" +-msgstr "情報(_I)" ++msgstr "情報" + + #: gtk/deprecated/gtkstock.c:420 + msgctxt "Stock label" + msgid "_No" +-msgstr "いいえ(_N)" ++msgstr "いいえ" + + #: gtk/deprecated/gtkstock.c:421 + msgctxt "Stock label" + msgid "_OK" +-msgstr "OK(_O)" ++msgstr "OK" + + #. Page orientation + #: gtk/deprecated/gtkstock.c:424 +@@ -1388,32 +1388,32 @@ + #: gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "Page Set_up" +-msgstr "ページの設定(_U)" ++msgstr "ページの設定" + + #: gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "設定(_P)" ++msgstr "設定" + + #: gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Color" +-msgstr "色(_C)" ++msgstr "色" + + #: gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Font" +-msgstr "フォント(_F)" ++msgstr "フォント" + + #: gtk/deprecated/gtkstock.c:455 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "削除の取り消し(_U)" ++msgstr "削除の取り消し" + + #: gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "はい(_Y)" ++msgstr "はい" + + #: gtk/deprecated/gtkuimanager.c:1782 + #, c-format +@@ -1527,16 +1527,16 @@ + + #: gtk/gtkaboutdialog.c:703 + msgid "C_redits" +-msgstr "クレジット(_R)" ++msgstr "クレジット" + + #: gtk/gtkaboutdialog.c:711 + msgid "_License" +-msgstr "ライセンス(_L)" ++msgstr "ライセンス" + + #: gtk/gtkaboutdialog.c:720 gtk/gtkcustompaperunixdialog.c:329 + #: gtk/gtkmessagedialog.c:948 gtk/ui/gtkassistant.ui:144 + msgid "_Close" +-msgstr "閉じる(_C)" ++msgstr "閉じる" + + #: gtk/gtkaboutdialog.c:1004 + msgid "Could not show link" +@@ -2197,7 +2197,7 @@ + + #: gtk/gtkcolorswatch.c:360 + msgid "C_ustomize" +-msgstr "カスタマイズ(_U)" ++msgstr "カスタマイズ" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2233,11 +2233,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "幅(_W):" ++msgstr "幅:" + + #: gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "高さ(_H):" ++msgstr "高さ:" + + #: gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2245,19 +2245,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "上側(_T):" ++msgstr "上側:" + + #: gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "下側(_B):" ++msgstr "下側:" + + #: gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "左側(_L):" ++msgstr "左側:" + + #: gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "右側(_R):" ++msgstr "右側:" + + #: gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2265,28 +2265,28 @@ + + #: gtk/gtkentry.c:9591 gtk/gtklabel.c:6680 gtk/gtktextview.c:9520 + msgid "Cu_t" +-msgstr "切り取り(_T)" ++msgstr "切り取り" + + #: gtk/gtkentry.c:9595 gtk/gtklabel.c:6681 gtk/gtktextview.c:9524 + msgid "_Copy" +-msgstr "コピー(_C)" ++msgstr "コピー" + + #: gtk/gtkentry.c:9599 gtk/gtklabel.c:6682 gtk/gtktextview.c:9526 + msgid "_Paste" +-msgstr "貼り付け(_P)" ++msgstr "貼り付け" + + #: gtk/gtkentry.c:9602 gtk/gtkfilechooserwidget.c:1499 + #: gtk/gtkfilechooserwidget.c:2334 gtk/gtklabel.c:6684 gtk/gtktextview.c:9529 + msgid "_Delete" +-msgstr "削除(_D)" ++msgstr "削除" + + #: gtk/gtkentry.c:9613 gtk/gtklabel.c:6693 gtk/gtktextview.c:9543 + msgid "Select _All" +-msgstr "すべて選択(_A)" ++msgstr "すべて選択" + + #: gtk/gtkentry.c:9623 gtk/gtktextview.c:9553 + msgid "Insert _Emoji" +-msgstr "絵文字を挿入(_E)" ++msgstr "絵文字を挿入" + + #: gtk/gtkentry.c:9799 gtk/gtktextview.c:9777 + msgid "Select all" +@@ -2330,18 +2330,18 @@ + + #: gtk/gtkfilechooserdialog.c:542 + msgid "_Name" +-msgstr "名前(_N)" ++msgstr "名前" + + #. Open item is always present + #: gtk/gtkfilechoosernative.c:546 gtk/gtkfilechoosernative.c:631 + #: gtk/gtkplacessidebar.c:3625 gtk/gtkplacessidebar.c:3693 + #: gtk/gtkplacesview.c:1696 + msgid "_Open" +-msgstr "開く(_O)" ++msgstr "開く" + + #: gtk/gtkfilechoosernative.c:631 gtk/inspector/css-editor.c:202 + msgid "_Save" +-msgstr "保存(_S)" ++msgstr "保存" + + #: gtk/gtkfilechoosernativequartz.c:331 gtk/ui/gtkfilechooserwidget.ui:405 + msgid "Select which types of files are shown" +@@ -2496,48 +2496,48 @@ + + #: gtk/gtkfilechooserwidget.c:2329 + msgid "_Visit File" +-msgstr "ファイルの場所に移動する(_V)" ++msgstr "ファイルの場所に移動する" + + #: gtk/gtkfilechooserwidget.c:2330 + msgid "_Open With File Manager" +-msgstr "ファイルマネージャーで開く(_O)" ++msgstr "ファイルマネージャーで開く" + + #: gtk/gtkfilechooserwidget.c:2331 + msgid "_Copy Location" +-msgstr "場所のコピー(_C)" ++msgstr "場所のコピー" + + #: gtk/gtkfilechooserwidget.c:2332 + msgid "_Add to Bookmarks" +-msgstr "ブックマークへ追加(_A)" ++msgstr "ブックマークへ追加" + + #: gtk/gtkfilechooserwidget.c:2333 gtk/gtkplacessidebar.c:2741 + #: gtk/ui/gtkfilechooserwidget.ui:539 + msgid "_Rename" +-msgstr "名前の変更(_R)" ++msgstr "名前の変更" + + #: gtk/gtkfilechooserwidget.c:2335 + msgid "_Move to Trash" +-msgstr "ゴミ箱へ移動する(_M)" ++msgstr "ゴミ箱へ移動する" + + #: gtk/gtkfilechooserwidget.c:2339 + msgid "Show _Hidden Files" +-msgstr "隠しファイルを表示する(_H)" ++msgstr "隠しファイルを表示する" + + #: gtk/gtkfilechooserwidget.c:2340 + msgid "Show _Size Column" +-msgstr "サイズを表示する(_S)" ++msgstr "サイズを表示する" + + #: gtk/gtkfilechooserwidget.c:2341 + msgid "Show T_ype Column" +-msgstr "種類を表示する(_Y)" ++msgstr "種類を表示する" + + #: gtk/gtkfilechooserwidget.c:2342 + msgid "Show _Time" +-msgstr "時刻を表示する(_T)" ++msgstr "時刻を表示する" + + #: gtk/gtkfilechooserwidget.c:2343 + msgid "Sort _Folders before Files" +-msgstr "フォルダーをファイルよりも前に配置する(_F)" ++msgstr "フォルダーをファイルよりも前に配置する" + + #. this is the header for the location column in the print dialog + #: gtk/gtkfilechooserwidget.c:2625 gtk/inspector/css-node-tree.ui:141 +@@ -2548,7 +2548,7 @@ + #. Label + #: gtk/gtkfilechooserwidget.c:2718 + msgid "_Name:" +-msgstr "名前(_N):" ++msgstr "名前:" + + #: gtk/gtkfilechooserwidget.c:3343 gtk/gtkfilechooserwidget.c:3357 + #, c-format +@@ -2683,7 +2683,7 @@ + + #: gtk/gtkfilechooserwidget.c:6573 gtk/gtkprintunixdialog.c:677 + msgid "_Replace" +-msgstr "置き換える(_R)" ++msgstr "置き換える" + + #: gtk/gtkfilechooserwidget.c:6792 + msgid "You do not have access to the specified folder." +@@ -2832,12 +2832,12 @@ + #. Open Link + #: gtk/gtklabel.c:6661 + msgid "_Open Link" +-msgstr "リンクを開く(_O)" ++msgstr "リンクを開く" + + #. Copy Link Address + #: gtk/gtklabel.c:6670 + msgid "Copy _Link Address" +-msgstr "リンクのアドレスをコピー(_L)" ++msgstr "リンクのアドレスをコピー" + + #: gtk/gtk-launch.c:42 + msgid "Show program version" +@@ -2984,15 +2984,15 @@ + + #: gtk/gtkmessagedialog.c:956 + msgid "_No" +-msgstr "いいえ(_N)" ++msgstr "いいえ" + + #: gtk/gtkmessagedialog.c:957 + msgid "_Yes" +-msgstr "はい(_Y)" ++msgstr "はい" + + #: gtk/gtkmountoperation.c:595 + msgid "Co_nnect" +-msgstr "接続する(_N)" ++msgstr "接続する" + + #: gtk/gtkmountoperation.c:668 + msgid "Connect As" +@@ -3000,19 +3000,19 @@ + + #: gtk/gtkmountoperation.c:677 + msgid "_Anonymous" +-msgstr "匿名(_A)" ++msgstr "匿名" + + #: gtk/gtkmountoperation.c:686 + msgid "Registered U_ser" +-msgstr "登録ユーザー(_S)" ++msgstr "登録ユーザー" + + #: gtk/gtkmountoperation.c:697 + msgid "_Username" +-msgstr "ユーザー名(_U)" ++msgstr "ユーザー名" + + #: gtk/gtkmountoperation.c:702 + msgid "_Domain" +-msgstr "ドメイン(_D)" ++msgstr "ドメイン" + + #: gtk/gtkmountoperation.c:711 + msgid "Volume type" +@@ -3020,31 +3020,31 @@ + + #: gtk/gtkmountoperation.c:721 + msgid "_Hidden" +-msgstr "隠しボリューム(_H)" ++msgstr "隠しボリューム" + + #: gtk/gtkmountoperation.c:724 + msgid "_Windows system" +-msgstr "Windows システムボリューム(_W)" ++msgstr "Windows システムボリューム" + + #: gtk/gtkmountoperation.c:727 + msgid "_PIM" +-msgstr "PIM(_P)" ++msgstr "PIM" + + #: gtk/gtkmountoperation.c:733 + msgid "_Password" +-msgstr "パスワード(_P)" ++msgstr "パスワード" + + #: gtk/gtkmountoperation.c:755 + msgid "Forget password _immediately" +-msgstr "今すぐパスワードを破棄する(_I)" ++msgstr "今すぐパスワードを破棄する" + + #: gtk/gtkmountoperation.c:765 + msgid "Remember password until you _logout" +-msgstr "ログアウトするまでパスワードを記憶する(_L)" ++msgstr "ログアウトするまでパスワードを記憶する" + + #: gtk/gtkmountoperation.c:775 + msgid "Remember _forever" +-msgstr "期限なしで記憶する(_F)" ++msgstr "期限なしで記憶する" + + #: gtk/gtkmountoperation.c:1170 + #, c-format +@@ -3058,7 +3058,7 @@ + + #: gtk/gtkmountoperation.c:1389 + msgid "_End Process" +-msgstr "プロセスを終了(_E)" ++msgstr "プロセスを終了" + + #: gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -3220,45 +3220,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: gtk/gtkplacessidebar.c:2334 gtk/gtkplacessidebar.c:3713 + msgid "_Start" +-msgstr "開始(_S)" ++msgstr "開始" + + #: gtk/gtkplacessidebar.c:2335 gtk/gtkplacessidebar.c:3714 + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: gtk/gtkplacessidebar.c:2342 + msgid "_Power On" +-msgstr "電源オン(_P)" ++msgstr "電源オン" + + #: gtk/gtkplacessidebar.c:2343 + msgid "_Safely Remove Drive" +-msgstr "ドライブの安全な取り出し(_S)" ++msgstr "ドライブの安全な取り出し" + + #: gtk/gtkplacessidebar.c:2347 + msgid "_Connect Drive" +-msgstr "ドライブに接続(_C)" ++msgstr "ドライブに接続" + + #: gtk/gtkplacessidebar.c:2348 + msgid "_Disconnect Drive" +-msgstr "ドライブを切断(_D)" ++msgstr "ドライブを切断" + + #: gtk/gtkplacessidebar.c:2352 + msgid "_Start Multi-disk Device" +-msgstr "マルチディスクデバイスを起動(_S)" ++msgstr "マルチディスクデバイスを起動" + + #: gtk/gtkplacessidebar.c:2353 + msgid "_Stop Multi-disk Device" +-msgstr "マルチディスクデバイスを停止(_S)" ++msgstr "マルチディスクデバイスを停止" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: gtk/gtkplacessidebar.c:2358 + msgid "_Unlock Device" +-msgstr "デバイスのロック解除(_U)" ++msgstr "デバイスのロック解除" + + #: gtk/gtkplacessidebar.c:2359 + msgid "_Lock Device" +-msgstr "デバイスのロック(_L)" ++msgstr "デバイスのロック" + + #: gtk/gtkplacessidebar.c:2397 gtk/gtkplacessidebar.c:3394 + #, c-format +@@ -3313,20 +3313,20 @@ + #: gtk/gtkplacessidebar.c:3630 gtk/gtkplacessidebar.c:3696 + #: gtk/gtkplacesview.c:1706 + msgid "Open in New _Tab" +-msgstr "新しいタブで開く(_T)" ++msgstr "新しいタブで開く" + + #: gtk/gtkplacessidebar.c:3636 gtk/gtkplacessidebar.c:3699 + #: gtk/gtkplacesview.c:1717 + msgid "Open in New _Window" +-msgstr "新しいウィンドウで開く(_W)" ++msgstr "新しいウィンドウで開く" + + #: gtk/gtkplacessidebar.c:3703 + msgid "_Add Bookmark" +-msgstr "ブックマークを追加(_A)" ++msgstr "ブックマークを追加" + + #: gtk/gtkplacessidebar.c:3704 + msgid "_Remove" +-msgstr "削除(_R)" ++msgstr "削除" + + #: gtk/gtkplacessidebar.c:3705 + msgid "Rename…" +@@ -3334,19 +3334,19 @@ + + #: gtk/gtkplacessidebar.c:3709 gtk/gtkplacesview.c:1751 + msgid "_Mount" +-msgstr "マウント(_M)" ++msgstr "マウント" + + #: gtk/gtkplacessidebar.c:3710 gtk/gtkplacesview.c:1741 + msgid "_Unmount" +-msgstr "アンマウント(_U)" ++msgstr "アンマウント" + + #: gtk/gtkplacessidebar.c:3711 + msgid "_Eject" +-msgstr "取り出す(_E)" ++msgstr "取り出す" + + #: gtk/gtkplacessidebar.c:3712 + msgid "_Detect Media" +-msgstr "メディアを検出(_D)" ++msgstr "メディアを検出" + + #: gtk/gtkplacessidebar.c:4158 gtk/gtkplacesview.c:1122 + msgid "Computer" +@@ -3368,7 +3368,7 @@ + #. Restore from Cancel to Connect + #: gtk/gtkplacesview.c:1250 gtk/ui/gtkplacesview.ui:317 + msgid "Con_nect" +-msgstr "接続(_N)" ++msgstr "接続" + + #. if it wasn't cancelled show a dialog + #: gtk/gtkplacesview.c:1384 +@@ -3378,7 +3378,7 @@ + #. Allow to cancel the operation + #: gtk/gtkplacesview.c:1485 + msgid "Cance_l" +-msgstr "キャンセル(_L)" ++msgstr "キャンセル" + + #: gtk/gtkplacesview.c:1648 + msgid "AppleTalk" +@@ -3421,11 +3421,11 @@ + + #: gtk/gtkplacesview.c:1741 + msgid "_Disconnect" +-msgstr "切断(_D)" ++msgstr "切断" + + #: gtk/gtkplacesview.c:1751 + msgid "_Connect" +-msgstr "接続(_C)" ++msgstr "接続" + + #: gtk/gtkplacesview.c:1892 + msgid "Unable to get remote server location" +@@ -3464,7 +3464,7 @@ + + #: gtk/gtkprintbackend.c:849 + msgid "_Remember password" +-msgstr "パスワードを記憶する(_R)" ++msgstr "パスワードを記憶する" + + #: gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3616,11 +3616,11 @@ + + #: gtk/gtkprintunixdialog.c:746 + msgid "Pre_view" +-msgstr "プレビュー(_V)" ++msgstr "プレビュー" + + #: gtk/gtkprintunixdialog.c:748 + msgid "_Print" +-msgstr "印刷(_P)" ++msgstr "印刷" + + #: gtk/gtkprintunixdialog.c:861 + msgid "Getting printer information failed" +@@ -3721,19 +3721,19 @@ + + #: gtk/gtkrecentchooserdefault.c:1689 + msgid "Copy _Location" +-msgstr "場所のコピー(_L)" ++msgstr "場所のコピー" + + #: gtk/gtkrecentchooserdefault.c:1700 + msgid "_Remove From List" +-msgstr "一覧から削除する(_R)" ++msgstr "一覧から削除する" + + #: gtk/gtkrecentchooserdefault.c:1707 + msgid "_Clear List" +-msgstr "一覧のクリア(_C)" ++msgstr "一覧のクリア" + + #: gtk/gtkrecentchooserdefault.c:1719 + msgid "Show _Private Resources" +-msgstr "個人的なリソースを表示する(_P)" ++msgstr "個人的なリソースを表示する" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3828,7 +3828,7 @@ + + #: gtk/gtkshortcutssection.c:451 + msgid "_Show All" +-msgstr "すべて表示する(_S)" ++msgstr "すべて表示する" + + #: gtk/gtkshortcutsshortcut.c:136 + msgid "Two finger pinch" +@@ -3996,43 +3996,43 @@ + + #: gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM 左→右 Mark(_L)" ++msgstr "LRM 左→右 Mark" + + #: gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM 右→左 Mark(_R)" ++msgstr "RLM 右→左 Mark" + + #: gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +-msgstr "LRE 左→右 Embedding(_E)" ++msgstr "LRE 左→右 Embedding" + + #: gtk/gtktextutil.c:60 + msgid "RLE Right-to-left e_mbedding" +-msgstr "RLE 右→左 Embedding(_M)" ++msgstr "RLE 右→左 Embedding" + + #: gtk/gtktextutil.c:61 + msgid "LRO Left-to-right _override" +-msgstr "LRO 左→右 Override(_O)" ++msgstr "LRO 左→右 Override" + + #: gtk/gtktextutil.c:62 + msgid "RLO Right-to-left o_verride" +-msgstr "RLO 右→左 Override(_V)" ++msgstr "RLO 右→左 Override" + + #: gtk/gtktextutil.c:63 + msgid "PDF _Pop directional formatting" +-msgstr "PDF POP Directional Formatting(_P)" ++msgstr "PDF POP Directional Formatting" + + #: gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS Zero Width Space(_Z)" ++msgstr "ZWS Zero Width Space" + + #: gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +-msgstr "ZWJ Zero Width Joiner(_J)" ++msgstr "ZWJ Zero Width Joiner" + + #: gtk/gtktextutil.c:66 + msgid "ZWNJ Zero width _non-joiner" +-msgstr "ZWNJ Zero Width Non-Joiner(_N)" ++msgstr "ZWNJ Zero Width Non-Joiner" + + #: gtk/gtkvolumebutton.c:189 + msgid "Adjusts the volume" +@@ -7095,11 +7095,11 @@ + + #: gtk/ui/gtkappchooserdialog.ui:78 + msgid "_View All Applications" +-msgstr "すべてのアプリケーションを表示(_V)" ++msgstr "すべてのアプリケーションを表示" + + #: gtk/ui/gtkappchooserdialog.ui:86 + msgid "_Find New Applications" +-msgstr "新しいアプリケーションを探す(_F)" ++msgstr "新しいアプリケーションを探す" + + #: gtk/ui/gtkappchooserwidget.ui:119 + msgid "No applications found." +@@ -7139,15 +7139,15 @@ + + #: gtk/ui/gtkassistant.ui:68 + msgid "_Next" +-msgstr "進む(_N)" ++msgstr "進む" + + #: gtk/ui/gtkassistant.ui:88 + msgid "_Back" +-msgstr "戻る(_B)" ++msgstr "戻る" + + #: gtk/ui/gtkassistant.ui:107 + msgid "_Finish" +-msgstr "完了(_F)" ++msgstr "完了" + + #: gtk/ui/gtkcolorchooserdialog.ui:6 + msgid "Select a Color" +@@ -7244,7 +7244,7 @@ + + #: gtk/ui/gtkfilechooserwidget.ui:474 + msgid "_Create" +-msgstr "作成(_C)" ++msgstr "作成" + + #: gtk/ui/gtkfontchooserdialog.ui:6 + msgid "Select Font" +@@ -7268,15 +7268,15 @@ + + #: gtk/ui/gtkpagesetupunixdialog.ui:47 + msgid "_Format for:" +-msgstr "フォーマット(_F):" ++msgstr "フォーマット:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:80 gtk/ui/gtkprintunixdialog.ui:747 + msgid "_Paper size:" +-msgstr "用紙サイズ(_P):" ++msgstr "用紙サイズ:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:122 + msgid "_Orientation:" +-msgstr "用紙の向き(_O):" ++msgstr "用紙の向き:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:152 gtk/ui/gtkprintunixdialog.ui:794 + msgid "Portrait" +@@ -7330,7 +7330,7 @@ + + #: gtk/ui/gtkplacesview.ui:307 + msgid "Connect to _Server" +-msgstr "サーバーへ接続(_S)" ++msgstr "サーバーへ接続" + + #: gtk/ui/gtkplacesview.ui:340 + msgid "Enter server address…" +@@ -7351,19 +7351,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:201 + msgid "_All Pages" +-msgstr "すべてのページ(_A)" ++msgstr "すべてのページ" + + #: gtk/ui/gtkprintunixdialog.ui:216 + msgid "C_urrent Page" +-msgstr "現在のページだけ(_U)" ++msgstr "現在のページだけ" + + #: gtk/ui/gtkprintunixdialog.ui:233 + msgid "Se_lection" +-msgstr "選択(_L)" ++msgstr "選択" + + #: gtk/ui/gtkprintunixdialog.ui:249 + msgid "Pag_es:" +-msgstr "ページ(_E):" ++msgstr "ページ:" + + #: gtk/ui/gtkprintunixdialog.ui:252 gtk/ui/gtkprintunixdialog.ui:270 + #: gtk/ui/gtkprintunixdialog.ui:277 +@@ -7384,15 +7384,15 @@ + + #: gtk/ui/gtkprintunixdialog.ui:334 + msgid "Copie_s:" +-msgstr "コピーの数(_S):" ++msgstr "コピーの数:" + + #: gtk/ui/gtkprintunixdialog.ui:361 + msgid "C_ollate" +-msgstr "ページを揃える(_O)" ++msgstr "ページを揃える" + + #: gtk/ui/gtkprintunixdialog.ui:375 + msgid "_Reverse" +-msgstr "ページを逆順にする(_R)" ++msgstr "ページを逆順にする" + + #: gtk/ui/gtkprintunixdialog.ui:452 + msgid "Layout" +@@ -7400,19 +7400,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:475 + msgid "T_wo-sided:" +-msgstr "両面印刷(_W):" ++msgstr "両面印刷:" + + #: gtk/ui/gtkprintunixdialog.ui:500 + msgid "Pages per _side:" +-msgstr "段組み印刷(_S):" ++msgstr "段組み印刷:" + + #: gtk/ui/gtkprintunixdialog.ui:527 + msgid "Page or_dering:" +-msgstr "ページの順番(_D):" ++msgstr "ページの順番:" + + #: gtk/ui/gtkprintunixdialog.ui:553 + msgid "_Only print:" +-msgstr "印刷の対象(_O):" ++msgstr "印刷の対象:" + + #: gtk/ui/gtkprintunixdialog.ui:570 + msgid "All sheets" +@@ -7428,7 +7428,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:585 + msgid "Sc_ale:" +-msgstr "拡大/縮小(_A):" ++msgstr "拡大/縮小:" + + #: gtk/ui/gtkprintunixdialog.ui:649 + msgid "Paper" +@@ -7436,19 +7436,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:672 + msgid "Paper _type:" +-msgstr "種類(_T):" ++msgstr "種類:" + + #: gtk/ui/gtkprintunixdialog.ui:697 + msgid "Paper _source:" +-msgstr "用紙のソース(_S):" ++msgstr "用紙のソース:" + + #: gtk/ui/gtkprintunixdialog.ui:722 + msgid "Output t_ray:" +-msgstr "出力先のトレイ(_R):" ++msgstr "出力先のトレイ:" + + #: gtk/ui/gtkprintunixdialog.ui:776 + msgid "Or_ientation:" +-msgstr "用紙の向き(_I):" ++msgstr "用紙の向き:" + + #: gtk/ui/gtkprintunixdialog.ui:876 + msgid "Job Details" +@@ -7456,11 +7456,11 @@ + + #: gtk/ui/gtkprintunixdialog.ui:899 + msgid "Pri_ority:" +-msgstr "優先順位(_O):" ++msgstr "優先順位:" + + #: gtk/ui/gtkprintunixdialog.ui:923 + msgid "_Billing info:" +-msgstr "サマリ情報(_B):" ++msgstr "サマリ情報:" + + #: gtk/ui/gtkprintunixdialog.ui:967 + msgid "Print Document" +@@ -7469,12 +7469,12 @@ + #. this is one of the choices for the print at option in the print dialog + #: gtk/ui/gtkprintunixdialog.ui:987 + msgid "_Now" +-msgstr "今すぐ印刷する(_N)" ++msgstr "今すぐ印刷する" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: gtk/ui/gtkprintunixdialog.ui:1003 + msgid "A_t:" +-msgstr "時間を指定する(_T):" ++msgstr "時間を指定する:" + + #. Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported. + #: gtk/ui/gtkprintunixdialog.ui:1007 gtk/ui/gtkprintunixdialog.ui:1009 +@@ -7494,7 +7494,7 @@ + #. this is one of the choices for the print at option in the print dialog. It means that the print job will not be printed until it explicitly gets 'released'. + #: gtk/ui/gtkprintunixdialog.ui:1050 + msgid "On _hold" +-msgstr "保留する(_H)" ++msgstr "保留する" + + #: gtk/ui/gtkprintunixdialog.ui:1054 gtk/ui/gtkprintunixdialog.ui:1055 + msgid "Hold the job until it is explicitly released" +@@ -7507,12 +7507,12 @@ + #. this is the label used for the option in the print dialog that controls the front cover page. + #: gtk/ui/gtkprintunixdialog.ui:1115 + msgid "Be_fore:" +-msgstr "前(_F):" ++msgstr "前:" + + #. this is the label used for the option in the print dialog that controls the back cover page. + #: gtk/ui/gtkprintunixdialog.ui:1139 + msgid "_After:" +-msgstr "後(_A):" ++msgstr "後:" + + #: gtk/ui/gtkprintunixdialog.ui:1181 + msgid "Job" +@@ -7795,7 +7795,7 @@ + #: modules/printbackends/file/gtkprintbackendfile.c:676 + #: modules/printbackends/test/gtkprintbackendtest.c:501 + msgid "Pages per _sheet:" +-msgstr "段組み印刷(_S):" ++msgstr "段組み印刷:" + + #: modules/printbackends/cups/gtkprintbackendcups.c:1129 + #: modules/printbackends/cups/gtkprintbackendcups.c:1438 +@@ -8349,7 +8349,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "出力の形式(_O)" ++msgstr "出力の形式" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:394 + msgid "Print to LPR" +diff -urN a/po/kn.po b/po/kn.po +--- a/po/kn.po 2025-06-09 19:54:59.529434738 -0700 ++++ b/po/kn.po 2025-06-09 20:11:48.832737809 -0700 +@@ -215,27 +215,27 @@ + #: ../gdk/keyname-table.h:6867 + msgctxt "keyboard label" + msgid "KP_Home" +-msgstr "KP ನೆಲೆ (_H)" ++msgstr "KP ನೆಲೆ" + + #: ../gdk/keyname-table.h:6868 + msgctxt "keyboard label" + msgid "KP_Left" +-msgstr "KP ಎಡ (_L)" ++msgstr "KP ಎಡ" + + #: ../gdk/keyname-table.h:6869 + msgctxt "keyboard label" + msgid "KP_Up" +-msgstr "KP ಮೇಲೆ (_U)" ++msgstr "KP ಮೇಲೆ" + + #: ../gdk/keyname-table.h:6870 + msgctxt "keyboard label" + msgid "KP_Right" +-msgstr "KP ಬಲ (_R)" ++msgstr "KP ಬಲ" + + #: ../gdk/keyname-table.h:6871 + msgctxt "keyboard label" + msgid "KP_Down" +-msgstr "KP ಕೆಳಕ್ಕೆ (_D)" ++msgstr "KP ಕೆಳಕ್ಕೆ" + + #: ../gdk/keyname-table.h:6872 + msgctxt "keyboard label" +@@ -245,7 +245,7 @@ + #: ../gdk/keyname-table.h:6873 + msgctxt "keyboard label" + msgid "KP_Prior" +-msgstr "KP ಮೊದಲಿನ (_P)" ++msgstr "KP ಮೊದಲಿನ" + + #: ../gdk/keyname-table.h:6874 + msgctxt "keyboard label" +@@ -255,27 +255,27 @@ + #: ../gdk/keyname-table.h:6875 + msgctxt "keyboard label" + msgid "KP_Next" +-msgstr "KP ಮುಂದಿನ (_N)" ++msgstr "KP ಮುಂದಿನ" + + #: ../gdk/keyname-table.h:6876 + msgctxt "keyboard label" + msgid "KP_End" +-msgstr "KP ಕೊನೆ (_E)" ++msgstr "KP ಕೊನೆ" + + #: ../gdk/keyname-table.h:6877 + msgctxt "keyboard label" + msgid "KP_Begin" +-msgstr "KP ಆರಂಭಿಸು (_B)" ++msgstr "KP ಆರಂಭಿಸು" + + #: ../gdk/keyname-table.h:6878 + msgctxt "keyboard label" + msgid "KP_Insert" +-msgstr "KP ಸೇರಿಸು (_I)" ++msgstr "KP ಸೇರಿಸು" + + #: ../gdk/keyname-table.h:6879 + msgctxt "keyboard label" + msgid "KP_Delete" +-msgstr "KP ಅಳಿಸು (_D)" ++msgstr "KP ಅಳಿಸು" + + #: ../gdk/keyname-table.h:6880 + msgctxt "keyboard label" +@@ -581,17 +581,17 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "ಕುರಿತು (_A)" ++msgstr "ಕುರಿತು" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "ಸೇರಿಸು (_A)" ++msgstr "ಸೇರಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "ಬೋಲ್ಡ್‍ (_B)" ++msgstr "ಬೋಲ್ಡ್‍" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" +@@ -601,12 +601,12 @@ + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "ತೆರವುಗೊಳಿಸು (_C)" ++msgstr "ತೆರವುಗೊಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "ಮುಚ್ಚು (_C)" ++msgstr "ಮುಚ್ಚು" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -623,7 +623,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "ಪ್ರತಿ ಮಾಡು (_C)" ++msgstr "ಪ್ರತಿ ಮಾಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -633,7 +633,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "ಅಳಿಸು (_D)" ++msgstr "ಅಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -659,95 +659,95 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ಕಾರ್ಯಗತಗೊಳಿಸು (_E)" ++msgstr "ಕಾರ್ಯಗತಗೊಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "ಕಡತ (_F)" ++msgstr "ಕಡತ" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "ಹುಡುಕು (_F)" ++msgstr "ಹುಡುಕು" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ಹುಡುಕು ಹಾಗು ಬದಲಾಯಿಸು (_R)" ++msgstr "ಹುಡುಕು ಹಾಗು ಬದಲಾಯಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ಫ್ಲಾಪಿ (_F)" ++msgstr "ಫ್ಲಾಪಿ" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "ಪೂರ್ಣತೆರೆ (_F)" ++msgstr "ಪೂರ್ಣತೆರೆ" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "ಕೆಳಗೆ (_B)" ++msgstr "ಕೆಳಗೆ" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "ಮೊದಲಿನ (_F)" ++msgstr "ಮೊದಲಿನ" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "ಕೊನೆಯ (_L)" ++msgstr "ಕೊನೆಯ" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ಮೇಲಕ್ಕೆ (_T)" ++msgstr "ಮೇಲಕ್ಕೆ" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "ಹಿಂದಕ್ಕೆ (_B)" ++msgstr "ಹಿಂದಕ್ಕೆ" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "ಕೆಳಕ್ಕೆ (_D)" ++msgstr "ಕೆಳಕ್ಕೆ" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ಮುಂದಕ್ಕೆ (_F)" ++msgstr "ಮುಂದಕ್ಕೆ" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ಮೇಲಕ್ಕೆ (_U)" ++msgstr "ಮೇಲಕ್ಕೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "ಹಾರ್ಡ್ ಡಿಸ್ಕ್‍ (_H)" ++msgstr "ಹಾರ್ಡ್ ಡಿಸ್ಕ್‍" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "ಸಹಾಯ (_H)" ++msgstr "ಸಹಾಯ" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ನೆಲೆ (_H)" ++msgstr "ನೆಲೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -757,58 +757,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "ಮಾಹಿತಿ (_I)" ++msgstr "ಮಾಹಿತಿ" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ಇಟಾಲಿಕ್ (_I)" ++msgstr "ಇಟಾಲಿಕ್" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ಇಲ್ಲಿಗೆ ತೆರಳು (_J)" ++msgstr "ಇಲ್ಲಿಗೆ ತೆರಳು" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "ಮಧ್ಯ (_C)" ++msgstr "ಮಧ್ಯ" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ತುಂಬಿಸು (_F)" ++msgstr "ತುಂಬಿಸು" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "ಎಡ (_L):" ++msgstr "ಎಡ:" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "ಬಲ (_R):" ++msgstr "ಬಲ:" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "ಪೂರ್ಣತೆರೆಯಿಂದ ನಿರ್ಗಮಿಸು (_L)" ++msgstr "ಪೂರ್ಣತೆರೆಯಿಂದ ನಿರ್ಗಮಿಸು" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ಮುಂದಕ್ಕೆ (_F)" ++msgstr "ಮುಂದಕ್ಕೆ" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "ಮುಂದಿನ (_N)" ++msgstr "ಮುಂದಿನ" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -820,7 +820,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "ಚಲಾಯಿಸು (_P)" ++msgstr "ಚಲಾಯಿಸು" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -832,7 +832,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "ರೆಕಾರ್ಡು ಮಾಡು (_R)" ++msgstr "ರೆಕಾರ್ಡು ಮಾಡು" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -844,32 +844,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "ನಿಲ್ಲಿಸು (_S)" ++msgstr "ನಿಲ್ಲಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "ಜಾಲಬಂಧ (_N)" ++msgstr "ಜಾಲಬಂಧ" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "ಹೊಸ (_N)" ++msgstr "ಹೊಸ" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "ತೆರೆ (_O)" ++msgstr "ತೆರೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "ಅಂಟಿಸು (_P)" ++msgstr "ಅಂಟಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "ಮುದ್ರಿಸು (_P)" ++msgstr "ಮುದ್ರಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -879,86 +879,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "ಗುಣಲಕ್ಷಣಗಳು (_P)" ++msgstr "ಗುಣಲಕ್ಷಣಗಳು" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "ಬಿಟ್ಟು ಬಿಡು (_Q)" ++msgstr "ಬಿಟ್ಟು ಬಿಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "ಪುನಃ ಮಾಡು (_R)" ++msgstr "ಪುನಃ ಮಾಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ಪುನಶ್ಚೇತನಗೊಳಿಸು (_R)" ++msgstr "ಪುನಶ್ಚೇತನಗೊಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "ತೆಗೆದು ಹಾಕು (_R)" ++msgstr "ತೆಗೆದು ಹಾಕು" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "ಹಿಮ್ಮರಳಿಸು (_R)" ++msgstr "ಹಿಮ್ಮರಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "ಉಳಿಸು (_S)" ++msgstr "ಉಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "ಹೀಗೆ ಉಳಿಸು (_A)" ++msgstr "ಹೀಗೆ ಉಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು (_A)" ++msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ಏರಿಕೆ ಕ್ರಮ (_A)" ++msgstr "ಏರಿಕೆ ಕ್ರಮ" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "ಇಳಿಕೆಕ್ರಮ (_D)" ++msgstr "ಇಳಿಕೆಕ್ರಮ" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "ಕಾಗುಣಿತ ಪರಿಶೀಲನೆ (_S)" ++msgstr "ಕಾಗುಣಿತ ಪರಿಶೀಲನೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "ನಿಲ್ಲು (_S)" ++msgstr "ನಿಲ್ಲು" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "ಅಡ್ಡಗೆರೆ (_S)" ++msgstr "ಅಡ್ಡಗೆರೆ" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "ಅಡಿಗೆರೆ (_U)" ++msgstr "ಅಡಿಗೆರೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "ರದ್ದು ಮಾಡು (_U)" ++msgstr "ರದ್ದು ಮಾಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -969,23 +969,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "ಸಾಮಾನ್ಯ ಗಾತ್ರ (_N)" ++msgstr "ಸಾಮಾನ್ಯ ಗಾತ್ರ" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "ಸರಿಯಾಗಿ ಹೊಂದಿಕೆ (_F)" ++msgstr "ಸರಿಯಾಗಿ ಹೊಂದಿಕೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "ಹಿಗ್ಗಿಸು (_I)" ++msgstr "ಹಿಗ್ಗಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ಕುಗ್ಗಿಸು (_O)" ++msgstr "ಕುಗ್ಗಿಸು" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1046,7 +1046,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "ವರ್ಣಛಾಯೆ (_H):" ++msgstr "ವರ್ಣಛಾಯೆ:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1062,7 +1062,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "ಮೌಲ್ಯ (_V):" ++msgstr "ಮೌಲ್ಯ:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1070,7 +1070,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "ಕೆಂಪು (_R):" ++msgstr "ಕೆಂಪು:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1078,7 +1078,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "ಹಸಿರು (_G):" ++msgstr "ಹಸಿರು:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1086,7 +1086,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "ನೀಲಿ (_B):" ++msgstr "ನೀಲಿ:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1115,7 +1115,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "ವರ್ಣಫಲಕ (_P):" ++msgstr "ವರ್ಣಫಲಕ:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1154,7 +1154,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "ಬಣ್ಣವನ್ನು ಇಲ್ಲಿ ಉಳಿಸು (_S)" ++msgstr "ಬಣ್ಣವನ್ನು ಇಲ್ಲಿ ಉಳಿಸು" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1180,7 +1180,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "ರದ್ದುಗೊಳಿಸು (_C)" ++msgstr "ರದ್ದುಗೊಳಿಸು" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1188,11 +1188,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "ಆರಿಸು (_S)" ++msgstr "ಆರಿಸು" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "ನೆರವು (_H)" ++msgstr "ನೆರವು" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1206,11 +1206,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "ಪರಿವಾರ (_F):" ++msgstr "ಪರಿವಾರ:" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "ಶೈಲಿ (_S):" ++msgstr "ಶೈಲಿ:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1219,18 +1219,18 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "ಮುನ್ನೋಟ (_P):" ++msgstr "ಮುನ್ನೋಟ:" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "ಅನ್ವಯಿಸು (_A)" ++msgstr "ಅನ್ವಯಿಸು" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11653 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "ಸರಿ (_O)" ++msgstr "ಸರಿ" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1248,12 +1248,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "ಅನ್ವಯಿಸು (_A)" ++msgstr "ಅನ್ವಯಿಸು" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ರದ್ದು ಮಾಡು (_C)" ++msgstr "ರದ್ದು ಮಾಡು" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1263,37 +1263,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "ಮಾರ್ಪಡಿಸು (_C)" ++msgstr "ಮಾರ್ಪಡಿಸು" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "ತಿರಸ್ಕರಿಸು (_D)" ++msgstr "ತಿರಸ್ಕರಿಸು" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "ಸಂಪರ್ಕ ಕಡಿದುಹಾಕು (_D)" ++msgstr "ಸಂಪರ್ಕ ಕಡಿದುಹಾಕು" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "ಸಂಪಾದನೆ (_E)" ++msgstr "ಸಂಪಾದನೆ" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "ಸೂಚಿ (_I)" ++msgstr "ಸೂಚಿ" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "ಇಲ್ಲ (_N)" ++msgstr "ಇಲ್ಲ" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ಸರಿ (_O)" ++msgstr "ಸರಿ" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1327,27 +1327,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "ಆದ್ಯತೆಗಳು (_P)" ++msgstr "ಆದ್ಯತೆಗಳು" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "ಬಣ್ಣ (_C)" ++msgstr "ಬಣ್ಣ" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ಅಕ್ಷರ ಶೈಲಿ (_F)" ++msgstr "ಅಕ್ಷರ ಶೈಲಿ" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "ಅಳಿಸಬೇಡ (_U)" ++msgstr "ಅಳಿಸಬೇಡ" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ಹೌದು (_Y)" ++msgstr "ಹೌದು" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2011,7 +2011,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "ಅಗತ್ಯಾನುಗುಣಗೊಳಿಸು (_C)" ++msgstr "ಅಗತ್ಯಾನುಗುಣಗೊಳಿಸು" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2026,7 +2026,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "ಮುಚ್ಚು (_C)" ++msgstr "ಮುಚ್ಚು" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2052,11 +2052,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "ಅಗಲ (_W):" ++msgstr "ಅಗಲ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "ಎತ್ತರ (_H):" ++msgstr "ಎತ್ತರ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2064,19 +2064,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "ಮೇಲೆ (_T):" ++msgstr "ಮೇಲೆ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "ಕೆಳಗೆ (_B):" ++msgstr "ಕೆಳಗೆ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "ಎಡ (_L):" ++msgstr "ಎಡ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "ಬಲ (_R):" ++msgstr "ಬಲ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2090,20 +2090,20 @@ + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "ಪ್ರತಿ ಮಾಡು (_C)" ++msgstr "ಪ್ರತಿ ಮಾಡು" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "ಅಂಟಿಸು (_P)" ++msgstr "ಅಂಟಿಸು" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "ಅಳಿಸು (_D)" ++msgstr "ಅಳಿಸು" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು (_A)" ++msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2124,7 +2124,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3273 + msgid "_Open" +-msgstr "ತೆರೆ (_O)" ++msgstr "ತೆರೆ" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2196,28 +2196,28 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "ಕಡತಕ್ಕೆ ಹೋಗು (_V)" ++msgstr "ಕಡತಕ್ಕೆ ಹೋಗು" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +-msgstr "ಪ್ರತಿ ಮಾಡುವ ಸ್ಥಳ (_L)" ++msgstr "ಪ್ರತಿ ಮಾಡುವ ಸ್ಥಳ" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "ಪುಟಗುರುತಿಗೆ ಸೇರಿಸು (_A)" ++msgstr "ಪುಟಗುರುತಿಗೆ ಸೇರಿಸು" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "ಗೌಪ್ಯವಾಗಿರಸಲಾದ ಕಡತಗಳನ್ನು ತೋರಿಸು (_H)" ++msgstr "ಗೌಪ್ಯವಾಗಿರಸಲಾದ ಕಡತಗಳನ್ನು ತೋರಿಸು" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "ಗಾತ್ರದ ಉದ್ದಸಾಲನ್ನು ತೋರಿಸು (_S)" ++msgstr "ಗಾತ್ರದ ಉದ್ದಸಾಲನ್ನು ತೋರಿಸು" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "ಹೆಸರು (_N):" ++msgstr "ಹೆಸರು:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2270,7 +2270,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "ಬದಲಿ ಮಾಡು (_R)" ++msgstr "ಬದಲಿ ಮಾಡು" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2370,12 +2370,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "ಕೊಂಡಿಯನ್ನು ತೆರೆ (_O)" ++msgstr "ಕೊಂಡಿಯನ್ನು ತೆರೆ" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "ಕೊಂಡಿ ವಿಳಾಸವನ್ನು ಪ್ರತಿ ಮಾಡು (_L)" ++msgstr "ಕೊಂಡಿ ವಿಳಾಸವನ್ನು ಪ್ರತಿ ಮಾಡು" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2521,11 +2521,11 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "ಇಲ್ಲ (_N)" ++msgstr "ಇಲ್ಲ" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "ಹೌದು (_Y)" ++msgstr "ಹೌದು" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2537,7 +2537,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "ಅನಾಮಿಕ (_A)" ++msgstr "ಅನಾಮಿಕ" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2545,27 +2545,27 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "ಬಳಕೆದಾರ ಹೆಸರು (_U)" ++msgstr "ಬಳಕೆದಾರ ಹೆಸರು" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "ಡೊಮೇನ್ (_D)" ++msgstr "ಡೊಮೇನ್" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "ಗುಪ್ತಪದ (_P)" ++msgstr "ಗುಪ್ತಪದ" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +-msgstr "ಗುಪ್ತಪದವನ್ನು ತಕ್ಷಣ ಮರೆತು ಬಿಡು (_F)" ++msgstr "ಗುಪ್ತಪದವನ್ನು ತಕ್ಷಣ ಮರೆತು ಬಿಡು" + + #: ../gtk/gtkmountoperation.c:692 + msgid "Remember password until you _logout" +-msgstr "ಗುಪ್ತಪದವನ್ನು ನೀವು ನಿರ್ಗಮಿಸುವ ತನಕ ನೆನಪಿನಲ್ಲಿಡಿ (_R)" ++msgstr "ಗುಪ್ತಪದವನ್ನು ನೀವು ನಿರ್ಗಮಿಸುವ ತನಕ ನೆನಪಿನಲ್ಲಿಡಿ" + + #: ../gtk/gtkmountoperation.c:702 + msgid "Remember _forever" +-msgstr "ಸದಾ ನೆನಪಿನಲ್ಲಿಡು (_R)" ++msgstr "ಸದಾ ನೆನಪಿನಲ್ಲಿಡು" + + #: ../gtk/gtkmountoperation.c:1091 + #, c-format +@@ -2578,7 +2578,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "ಪ್ರಕ್ರಿಯೆಯನ್ನು ಕೊನೆಗೊಳಿಸು (_E)" ++msgstr "ಪ್ರಕ್ರಿಯೆಯನ್ನು ಕೊನೆಗೊಳಿಸು" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2741,45 +2741,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2230 ../gtk/gtkplacessidebar.c:3351 + msgid "_Start" +-msgstr "ಆರಂಭಿಸು (_S)" ++msgstr "ಆರಂಭಿಸು" + + #: ../gtk/gtkplacessidebar.c:2231 ../gtk/gtkplacessidebar.c:3358 + msgid "_Stop" +-msgstr "ನಿಲ್ಲಿಸು (_S)" ++msgstr "ನಿಲ್ಲಿಸು" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2238 + msgid "_Power On" +-msgstr "ಚಾಲನೆಗೊಳಿಸು (_P)" ++msgstr "ಚಾಲನೆಗೊಳಿಸು" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Safely Remove Drive" +-msgstr "ಡ್ರೈವ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ತೆಗೆದುಹಾಕು (_S)" ++msgstr "ಡ್ರೈವ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ತೆಗೆದುಹಾಕು" + + #: ../gtk/gtkplacessidebar.c:2243 + msgid "_Connect Drive" +-msgstr "ಡ್ರೈವ್ ಅನ್ನು ಜೋಡಿಸು (_C)" ++msgstr "ಡ್ರೈವ್ ಅನ್ನು ಜೋಡಿಸು" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Disconnect Drive" +-msgstr "ಡ್ರೈವ್‌ ಸಂಪರ್ಕತಪ್ಪಿಸು (_D)" ++msgstr "ಡ್ರೈವ್‌ ಸಂಪರ್ಕತಪ್ಪಿಸು" + + #: ../gtk/gtkplacessidebar.c:2248 + msgid "_Start Multi-disk Device" +-msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ಆರಂಭಿಸು (_S)" ++msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ಆರಂಭಿಸು" + + #: ../gtk/gtkplacessidebar.c:2249 + msgid "_Stop Multi-disk Device" +-msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ನಿಲ್ಲಿಸು (_S)" ++msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ನಿಲ್ಲಿಸು" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2254 + msgid "_Unlock Drive" +-msgstr "ಡ್ರೈವ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡು (_U)" ++msgstr "ಡ್ರೈವ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡು" + + #: ../gtk/gtkplacessidebar.c:2255 + msgid "_Lock Drive" +-msgstr "ಡ್ರೈವ್‌ ಅನ್ನು ಲಾಕ್ ಮಾಡು (_L)" ++msgstr "ಡ್ರೈವ್‌ ಅನ್ನು ಲಾಕ್ ಮಾಡು" + + #: ../gtk/gtkplacessidebar.c:2284 ../gtk/gtkplacessidebar.c:3033 + #, c-format +@@ -2814,15 +2814,15 @@ + + #: ../gtk/gtkplacessidebar.c:3281 + msgid "Open in New _Tab" +-msgstr "ಹೊಸ ಟ್ಯಾಬ್‌ನಲ್ಲಿ ತೆರೆ (_T)" ++msgstr "ಹೊಸ ಟ್ಯಾಬ್‌ನಲ್ಲಿ ತೆರೆ" + + #: ../gtk/gtkplacessidebar.c:3290 + msgid "Open in New _Window" +-msgstr "ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ (_W)" ++msgstr "ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ" + + #: ../gtk/gtkplacessidebar.c:3299 + msgid "_Add Bookmark" +-msgstr "ಪುಟಗುರುತನ್ನು ಸೇರಿಸು (_A)" ++msgstr "ಪುಟಗುರುತನ್ನು ಸೇರಿಸು" + + #: ../gtk/gtkplacessidebar.c:3305 + msgid "Remove" +@@ -2834,19 +2834,19 @@ + + #: ../gtk/gtkplacessidebar.c:3323 + msgid "_Mount" +-msgstr "ಏರಿಸು (_M)" ++msgstr "ಏರಿಸು" + + #: ../gtk/gtkplacessidebar.c:3330 + msgid "_Unmount" +-msgstr "ಇಳಿಸು (_U)" ++msgstr "ಇಳಿಸು" + + #: ../gtk/gtkplacessidebar.c:3337 + msgid "_Eject" +-msgstr "ಹೊರದಬ್ಬು (_E)" ++msgstr "ಹೊರದಬ್ಬು" + + #: ../gtk/gtkplacessidebar.c:3344 + msgid "_Detect Media" +-msgstr "ಮಾಧ್ಯಮವನ್ನು ಪತ್ತೆ ಮಾಡು (_D)" ++msgstr "ಮಾಧ್ಯಮವನ್ನು ಪತ್ತೆ ಮಾಡು" + + #: ../gtk/gtkplacessidebar.c:3953 + msgid "Computer" +@@ -2858,7 +2858,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "ಗುಪ್ತಪದವನ್ನು ನೆನಪಿನಲ್ಲಿಡು (_R)" ++msgstr "ಗುಪ್ತಪದವನ್ನು ನೆನಪಿನಲ್ಲಿಡು" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3010,7 +3010,7 @@ + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "ಮುದ್ರಿಸು (_P)" ++msgstr "ಮುದ್ರಿಸು" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3113,19 +3113,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "ಇಲ್ಲಿಗೆ ನಕಲಿಸು (_L)" ++msgstr "ಇಲ್ಲಿಗೆ ನಕಲಿಸು" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು (_R)" ++msgstr "ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "ಪಟ್ಟಿಯನ್ನು ಅಳಿಸಿಹಾಕು (_C)" ++msgstr "ಪಟ್ಟಿಯನ್ನು ಅಳಿಸಿಹಾಕು" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "ಖಾಸಗಿ ಸಂಪನ್ಮೂಲಗಳನ್ನು ತೋರಿಸು (_P)" ++msgstr "ಖಾಸಗಿ ಸಂಪನ್ಮೂಲಗಳನ್ನು ತೋರಿಸು" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3334,11 +3334,11 @@ + + #: ../gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM ಎಡದಿಂದ-ಬಲಕ್ಕೆ ಗುರುತು (_L)" ++msgstr "LRM ಎಡದಿಂದ-ಬಲಕ್ಕೆ ಗುರುತು" + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM ಬಲದಿಂದ-ಎಡಕ್ಕೆ ಗುರುತು (_R)" ++msgstr "RLM ಬಲದಿಂದ-ಎಡಕ್ಕೆ ಗುರುತು" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3362,7 +3362,7 @@ + + #: ../gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS ಶೂನ್ಯ ಅಗಲದ ಜಾಗ (_Z)" ++msgstr "ZWS ಶೂನ್ಯ ಅಗಲದ ಜಾಗ" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +@@ -3492,7 +3492,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "ಉಳಿಸು (_S)" ++msgstr "ಉಳಿಸು" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -5280,7 +5280,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "ಔಟ್‌ಪುಟ್ ವಿನ್ಯಾಸ (_O)" ++msgstr "ಔಟ್‌ಪುಟ್ ವಿನ್ಯಾಸ" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5339,11 +5339,11 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "ಎಲ್ಲಾ ಅನ್ವಯಗಳನ್ನು ನೋಡಿ (_V)" ++msgstr "ಎಲ್ಲಾ ಅನ್ವಯಗಳನ್ನು ನೋಡಿ" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + msgid "_Find New Applications" +-msgstr "ಹೊಸ ಅನ್ವಯಗಳನ್ನು ನೋಡು (_F)" ++msgstr "ಹೊಸ ಅನ್ವಯಗಳನ್ನು ನೋಡು" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5377,15 +5377,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "ಮುಂದಕ್ಕೆ (_N)" ++msgstr "ಮುಂದಕ್ಕೆ" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "ಹಿಂದಕ್ಕೆ (_B)" ++msgstr "ಹಿಂದಕ್ಕೆ" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "ಮುಗಿಸು (_F)" ++msgstr "ಮುಗಿಸು" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5433,7 +5433,7 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "ತಾಣ (_L):" ++msgstr "ತಾಣ:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5472,16 +5472,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "ಇದರ ವಿನ್ಯಾಸ (_F):" ++msgstr "ಇದರ ವಿನ್ಯಾಸ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "ಕಾಗದದ ಗಾತ್ರ (_P):" ++msgstr "ಕಾಗದದ ಗಾತ್ರ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "ವಾಲಿಕೆ (_O):" ++msgstr "ವಾಲಿಕೆ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5526,7 +5526,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "ಎಲ್ಲಾ ಹಾಳೆಗಳು (_A)" ++msgstr "ಎಲ್ಲಾ ಹಾಳೆಗಳು" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5568,7 +5568,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "ವಿಲೋಮ (_R)" ++msgstr "ವಿಲೋಮ" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5588,7 +5588,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "ಕೇವಲ ಮುದ್ರಿಸು (_O):" ++msgstr "ಕೇವಲ ಮುದ್ರಿಸು:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5624,7 +5624,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:39 + msgid "Or_ientation:" +-msgstr "ವಾಲಿಕೆ (_O):" ++msgstr "ವಾಲಿಕೆ:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:45 + msgid "Job Details" +@@ -5636,7 +5636,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "ಬಿಲ್ಲು ಮಾಡುವ ಮಾಹಿತಿ (_B):" ++msgstr "ಬಿಲ್ಲು ಮಾಡುವ ಮಾಹಿತಿ:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5645,12 +5645,12 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "ಈಗ (_N)" ++msgstr "ಈಗ" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 + msgid "A_t:" +-msgstr "ಇಲ್ಲಿ (_A):" ++msgstr "ಇಲ್ಲಿ:" + + #. Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:55 +@@ -5691,7 +5691,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "ಇದರ ನಂತರ (_A):" ++msgstr "ಇದರ ನಂತರ:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5765,7 +5765,7 @@ + #~ msgstr "ಚಾಲನೆ ಮತ್ತು ಜಡ ಸ್ಥಿತಿಗಳ ಬದಲಾವಣೆ ಮಾಡುತ್ತದೆ" + + #~ msgid "_License" +-#~ msgstr "ಪರವಾನಗಿ (_L)" ++#~ msgstr "ಪರವಾನಗಿ" + + #~ msgid "Failed to look for applications online" + #~ msgstr "ಅನ್ವಯಗಳನ್ನು ಆನ್‌ಲೈನಿನಲ್ಲಿ ನೋಡಲು ವಿಫಲಗೊಂಡಿದೆ" +@@ -5799,10 +5799,10 @@ + #~ msgstr "ಮುಂದುವರೆ (_o)" + + #~ msgid "Input _Methods" +-#~ msgstr "ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳು (_M)" ++#~ msgstr "ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳು" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "ಯುನಿಕೊಡ್ ನಿಯಂತ್ರಣ ಚಿಹ್ನೆ (_I)" ++#~ msgstr "ಯುನಿಕೊಡ್ ನಿಯಂತ್ರಣ ಚಿಹ್ನೆ" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "ಕಡತದ ಬಗೆಗಿನ ಮಾಹಿತಿಯನ್ನು ಮರಳಿ ಪಡೆಯಲಾಗಿಲ್ಲ" +@@ -5835,13 +5835,13 @@ + #~ msgstr "ಸ್ಥಳಗಳು" + + #~ msgid "_Places" +-#~ msgstr "ಸ್ಥಳಗಳು (_P)" ++#~ msgstr "ಸ್ಥಳಗಳು" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "ಆರಿಸಲ್ಪಟ್ಟ ಕೋಶಗಳನ್ನು ಬುಕ್-ಮಾರ್ಕುಗಳಿಗೆ ಸೇರಿಸಿ" + + #~ msgid "_Copy file’s location" +-#~ msgstr "ಕಡತದ ಸ್ಥಳವನ್ನು ಪ್ರತಿ ಮಾಡು (_C)" ++#~ msgstr "ಕಡತದ ಸ್ಥಳವನ್ನು ಪ್ರತಿ ಮಾಡು" + + #~ msgid "Type a file name" + #~ msgstr "ಒಂದು ಕಡತದ ಹೆಸರನ್ನು ಟೈಪಿಸು" +diff -urN a/po/ko.po b/po/ko.po +--- a/po/ko.po 2025-06-09 20:05:32.419563709 -0700 ++++ b/po/ko.po 2025-06-09 20:11:49.160742066 -0700 +@@ -656,32 +656,32 @@ + #: gtk/a11y/gtkimageaccessible.c:53 gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_About" +-msgstr "정보(_A)" ++msgstr "정보" + + #: gtk/a11y/gtkimageaccessible.c:54 gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Add" +-msgstr "추가(_A)" ++msgstr "추가" + + #: gtk/a11y/gtkimageaccessible.c:55 gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "굵게(_B)" ++msgstr "굵게" + + #: gtk/a11y/gtkimageaccessible.c:56 gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "CD-ROM(_C)" ++msgstr "CD-ROM" + + #: gtk/a11y/gtkimageaccessible.c:57 gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "지우기(_C)" ++msgstr "지우기" + + #: gtk/a11y/gtkimageaccessible.c:58 gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Close" +-msgstr "닫기(_C)" ++msgstr "닫기" + + #: gtk/a11y/gtkimageaccessible.c:59 gtk/gtkheaderbar.c:415 gtk/gtkwindow.c:9355 + msgid "Minimize" +@@ -698,17 +698,17 @@ + #: gtk/a11y/gtkimageaccessible.c:62 gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "복사(_C)" ++msgstr "복사" + + #: gtk/a11y/gtkimageaccessible.c:63 gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "Cu_t" +-msgstr "잘라내기(_T)" ++msgstr "잘라내기" + + #: gtk/a11y/gtkimageaccessible.c:64 gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "삭제(_D)" ++msgstr "삭제" + + #: gtk/a11y/gtkimageaccessible.c:65 gtk/deprecated/gtkstock.c:339 + msgctxt "Stock label" +@@ -734,95 +734,95 @@ + #: gtk/a11y/gtkimageaccessible.c:69 gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "실행(_E)" ++msgstr "실행" + + #: gtk/a11y/gtkimageaccessible.c:70 gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_File" +-msgstr "파일(_F)" ++msgstr "파일" + + #: gtk/a11y/gtkimageaccessible.c:71 gtk/deprecated/gtkstock.c:363 + msgctxt "Stock label" + msgid "_Find" +-msgstr "찾기(_F)" ++msgstr "찾기" + + #: gtk/a11y/gtkimageaccessible.c:72 gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "찾아서 바꾸기(_R)" ++msgstr "찾아서 바꾸기" + + #: gtk/a11y/gtkimageaccessible.c:73 gtk/deprecated/gtkstock.c:365 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "플로피(_F)" ++msgstr "플로피" + + #: gtk/a11y/gtkimageaccessible.c:74 gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "전체 화면(_F)" ++msgstr "전체 화면" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/a11y/gtkimageaccessible.c:75 gtk/deprecated/gtkstock.c:369 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "맨 아래(_B)" ++msgstr "맨 아래" + + #. This is a navigation label as in "go to the first page" + #: gtk/a11y/gtkimageaccessible.c:76 gtk/deprecated/gtkstock.c:371 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "처음(_F)" ++msgstr "처음" + + #. This is a navigation label as in "go to the last page" + #: gtk/a11y/gtkimageaccessible.c:77 gtk/deprecated/gtkstock.c:373 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "마지막(_L)" ++msgstr "마지막" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/a11y/gtkimageaccessible.c:78 gtk/deprecated/gtkstock.c:375 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "맨 위(_T)" ++msgstr "맨 위" + + #. This is a navigation label as in "go back" + #: gtk/a11y/gtkimageaccessible.c:79 gtk/deprecated/gtkstock.c:377 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "뒤로(_B)" ++msgstr "뒤로" + + #. This is a navigation label as in "go down" + #: gtk/a11y/gtkimageaccessible.c:80 gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "아래로(_D)" ++msgstr "아래로" + + #. This is a navigation label as in "go forward" + #: gtk/a11y/gtkimageaccessible.c:81 gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "앞으로(_F)" ++msgstr "앞으로" + + #. This is a navigation label as in "go up" + #: gtk/a11y/gtkimageaccessible.c:82 gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "위로(_U)" ++msgstr "위로" + + #: gtk/a11y/gtkimageaccessible.c:83 gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "하드디스크(_H)" ++msgstr "하드디스크" + + #: gtk/a11y/gtkimageaccessible.c:84 gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Help" +-msgstr "도움말(_H)" ++msgstr "도움말" + + #: gtk/a11y/gtkimageaccessible.c:85 gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Home" +-msgstr "홈(_H)" ++msgstr "홈" + + #: gtk/a11y/gtkimageaccessible.c:86 gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" +@@ -832,203 +832,203 @@ + #: gtk/a11y/gtkimageaccessible.c:87 gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "기울이기(_I)" ++msgstr "기울이기" + + #: gtk/a11y/gtkimageaccessible.c:88 gtk/deprecated/gtkstock.c:392 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "이동(_J)" ++msgstr "이동" + + #. This is about text justification, "centered text" + #: gtk/a11y/gtkimageaccessible.c:89 gtk/deprecated/gtkstock.c:394 + msgctxt "Stock label" + msgid "_Center" +-msgstr "가운데(_C)" ++msgstr "가운데" + + #. This is about text justification + #: gtk/a11y/gtkimageaccessible.c:90 gtk/deprecated/gtkstock.c:396 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "채우기(_F)" ++msgstr "채우기" + + #. This is about text justification, "left-justified text" + #: gtk/a11y/gtkimageaccessible.c:91 gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label" + msgid "_Left" +-msgstr "왼쪽(_L)" ++msgstr "왼쪽" + + #. This is about text justification, "right-justified text" + #: gtk/a11y/gtkimageaccessible.c:92 gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label" + msgid "_Right" +-msgstr "오른쪽(_R)" ++msgstr "오른쪽" + + #: gtk/a11y/gtkimageaccessible.c:93 gtk/deprecated/gtkstock.c:367 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "전체 화면 나가기(_L)" ++msgstr "전체 화면 나가기" + + #. Media label, as in "fast forward" + #: gtk/a11y/gtkimageaccessible.c:94 gtk/deprecated/gtkstock.c:403 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "빨리 감기(_F)" ++msgstr "빨리 감기" + + #. Media label, as in "next song" + #: gtk/a11y/gtkimageaccessible.c:95 gtk/deprecated/gtkstock.c:405 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "다음(_N)" ++msgstr "다음" + + #. Media label, as in "pause music" + #: gtk/a11y/gtkimageaccessible.c:96 gtk/deprecated/gtkstock.c:407 + msgctxt "Stock label, media" + msgid "P_ause" +-msgstr "일시 중지(_A)" ++msgstr "일시 중지" + + #. Media label, as in "play music" + #: gtk/a11y/gtkimageaccessible.c:97 gtk/deprecated/gtkstock.c:409 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "재생(_P)" ++msgstr "재생" + + #. Media label, as in "previous song" + #: gtk/a11y/gtkimageaccessible.c:98 gtk/deprecated/gtkstock.c:411 + msgctxt "Stock label, media" + msgid "Pre_vious" +-msgstr "이전(_V)" ++msgstr "이전" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:99 gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "녹음/녹화(_R)" ++msgstr "녹음/녹화" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:100 gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label, media" + msgid "R_ewind" +-msgstr "되감기(_E)" ++msgstr "되감기" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:101 gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "중지(_S)" ++msgstr "중지" + + #: gtk/a11y/gtkimageaccessible.c:102 gtk/deprecated/gtkstock.c:418 + msgctxt "Stock label" + msgid "_Network" +-msgstr "네트워크(_N)" ++msgstr "네트워크" + + #: gtk/a11y/gtkimageaccessible.c:103 gtk/deprecated/gtkstock.c:419 + msgctxt "Stock label" + msgid "_New" +-msgstr "새로 만들기(_N)" ++msgstr "새로 만들기" + + #: gtk/a11y/gtkimageaccessible.c:104 gtk/deprecated/gtkstock.c:422 + msgctxt "Stock label" + msgid "_Open" +-msgstr "열기(_O)" ++msgstr "열기" + + #: gtk/a11y/gtkimageaccessible.c:105 gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "붙여넣기(_P)" ++msgstr "붙여넣기" + + #: gtk/a11y/gtkimageaccessible.c:106 gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Print" +-msgstr "인쇄(_P)" ++msgstr "인쇄" + + #: gtk/a11y/gtkimageaccessible.c:107 gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "Print Pre_view" +-msgstr "인쇄 미리 보기(_V)" ++msgstr "인쇄 미리 보기" + + #: gtk/a11y/gtkimageaccessible.c:108 gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "속성(_P)" ++msgstr "속성" + + #: gtk/a11y/gtkimageaccessible.c:109 gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "끝내기(_Q)" ++msgstr "끝내기" + + #: gtk/a11y/gtkimageaccessible.c:110 gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "다시 실행(_R)" ++msgstr "다시 실행" + + #: gtk/a11y/gtkimageaccessible.c:111 gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "새로 고침(_R)" ++msgstr "새로 고침" + + #: gtk/a11y/gtkimageaccessible.c:112 gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "제거(_R)" ++msgstr "제거" + + #: gtk/a11y/gtkimageaccessible.c:113 gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "되돌리기(_R)" ++msgstr "되돌리기" + + #: gtk/a11y/gtkimageaccessible.c:114 gtk/deprecated/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Save" +-msgstr "저장(_S)" ++msgstr "저장" + + #: gtk/a11y/gtkimageaccessible.c:115 gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "다른 이름으로 저장(_A)" ++msgstr "다른 이름으로 저장" + + #: gtk/a11y/gtkimageaccessible.c:116 gtk/deprecated/gtkstock.c:444 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "모두 선택(_A)" ++msgstr "모두 선택" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:117 gtk/deprecated/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "오름차순(_A)" ++msgstr "오름차순" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:118 gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "내림차순(_D)" ++msgstr "내림차순" + + #: gtk/a11y/gtkimageaccessible.c:119 gtk/deprecated/gtkstock.c:451 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "맞춤법 검사(_S)" ++msgstr "맞춤법 검사" + + #: gtk/a11y/gtkimageaccessible.c:120 gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "중지(_S)" ++msgstr "중지" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:121 gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "취소선(_S)" ++msgstr "취소선" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:122 gtk/deprecated/gtkstock.c:457 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "밑줄(_U)" ++msgstr "밑줄" + + #: gtk/a11y/gtkimageaccessible.c:123 gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "입력 취소(_U)" ++msgstr "입력 취소" + + #: gtk/a11y/gtkimageaccessible.c:124 gtk/deprecated/gtkstock.c:388 + msgctxt "Stock label" +@@ -1039,23 +1039,23 @@ + #: gtk/a11y/gtkimageaccessible.c:125 gtk/deprecated/gtkstock.c:461 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "보통 크기(_N)" ++msgstr "보통 크기" + + #. Zoom + #: gtk/a11y/gtkimageaccessible.c:126 gtk/deprecated/gtkstock.c:463 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "화면에 맞추기(_F)" ++msgstr "화면에 맞추기" + + #: gtk/a11y/gtkimageaccessible.c:127 gtk/deprecated/gtkstock.c:464 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "확대(_I)" ++msgstr "확대" + + #: gtk/a11y/gtkimageaccessible.c:128 gtk/deprecated/gtkstock.c:465 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "축소(_O)" ++msgstr "축소" + + #: gtk/a11y/gtkmenubuttonaccessible.c:102 gtk/inspector/window.ui:459 + msgid "Menu" +@@ -1117,7 +1117,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "색상(_H):" ++msgstr "색상:" + + #: gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -1125,7 +1125,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:464 + msgid "S_aturation:" +-msgstr "채도(_A):" ++msgstr "채도:" + + #: gtk/deprecated/gtkcolorsel.c:465 + msgid "Intensity of the color." +@@ -1133,7 +1133,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "값(_V):" ++msgstr "값:" + + #: gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -1141,7 +1141,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "빨강(_R):" ++msgstr "빨강:" + + #: gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -1149,7 +1149,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "초록(_G):" ++msgstr "초록:" + + #: gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -1157,7 +1157,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "파랑(_B):" ++msgstr "파랑:" + + #: gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -1165,7 +1165,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:476 + msgid "Op_acity:" +-msgstr "투명도(_A):" ++msgstr "투명도:" + + #: gtk/deprecated/gtkcolorsel.c:484 gtk/deprecated/gtkcolorsel.c:494 + msgid "Transparency of the color." +@@ -1173,7 +1173,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:501 + msgid "Color _name:" +-msgstr "색 이름(_N):" ++msgstr "색 이름:" + + #: gtk/deprecated/gtkcolorsel.c:516 + msgid "" +@@ -1185,7 +1185,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "색상표(_P):" ++msgstr "색상표:" + + #: gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -1222,7 +1222,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:1458 + msgid "_Save color here" +-msgstr "색 여기에 저장(_S)" ++msgstr "색 여기에 저장" + + #: gtk/deprecated/gtkcolorsel.c:1664 + msgid "" +@@ -1243,17 +1243,17 @@ + #: gtk/ui/gtkappchooserdialog.ui:61 gtk/ui/gtkassistant.ui:125 + #: gtk/ui/gtkcolorchooserdialog.ui:34 gtk/ui/gtkfontchooserdialog.ui:31 + msgid "_Cancel" +-msgstr "취소(_C)" ++msgstr "취소" + + #: gtk/deprecated/gtkcolorseldialog.c:195 gtk/gtkprinteroptionwidget.c:546 + #: gtk/ui/gtkappchooserdialog.ui:67 gtk/ui/gtkcolorchooserdialog.ui:40 + #: gtk/ui/gtkfontchooserdialog.ui:37 + msgid "_Select" +-msgstr "선택(_S)" ++msgstr "선택" + + #: gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "도움말(_H)" ++msgstr "도움말" + + #: gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1267,30 +1267,30 @@ + + #: gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "계열(_F):" ++msgstr "계열:" + + #: gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "유형(_S):" ++msgstr "유형:" + + #: gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +-msgstr "크기(_Z):" ++msgstr "크기:" + + #. create the text entry widget + #: gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "미리보기(_P):" ++msgstr "미리보기:" + + #: gtk/deprecated/gtkfontsel.c:1693 gtk/gtkpagesetupunixdialog.c:198 + #: gtk/ui/gtkassistant.ui:50 + msgid "_Apply" +-msgstr "적용(_A)" ++msgstr "적용" + + #: gtk/deprecated/gtkfontsel.c:1698 gtk/gtkmessagedialog.c:944 + #: gtk/gtkmessagedialog.c:966 gtk/gtkprintbackend.c:780 gtk/gtkwindow.c:12830 + msgid "_OK" +-msgstr "확인(_O)" ++msgstr "확인" + + #: gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1308,57 +1308,57 @@ + #: gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "적용(_A)" ++msgstr "적용" + + #: gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "취소(_C)" ++msgstr "취소" + + #: gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "C_onnect" +-msgstr "연결(_O)" ++msgstr "연결" + + #: gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "변환(_C)" ++msgstr "변환" + + #: gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "버리기(_D)" ++msgstr "버리기" + + #: gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "연결 끊기(_D)" ++msgstr "연결 끊기" + + #: gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "편집(_E)" ++msgstr "편집" + + #: gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Index" +-msgstr "색인(_I)" ++msgstr "색인" + + #: gtk/deprecated/gtkstock.c:390 + msgctxt "Stock label" + msgid "_Information" +-msgstr "정보(_I)" ++msgstr "정보" + + #: gtk/deprecated/gtkstock.c:420 + msgctxt "Stock label" + msgid "_No" +-msgstr "아니요(_N)" ++msgstr "아니요" + + #: gtk/deprecated/gtkstock.c:421 + msgctxt "Stock label" + msgid "_OK" +-msgstr "확인(_O)" ++msgstr "확인" + + #. Page orientation + #: gtk/deprecated/gtkstock.c:424 +@@ -1387,32 +1387,32 @@ + #: gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "Page Set_up" +-msgstr "페이지 설정(_U)" ++msgstr "페이지 설정" + + #: gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "기본 설정(_P)" ++msgstr "기본 설정" + + #: gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Color" +-msgstr "색(_C)" ++msgstr "색" + + #: gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Font" +-msgstr "글꼴(_F)" ++msgstr "글꼴" + + #: gtk/deprecated/gtkstock.c:455 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "삭제 취소(_U)" ++msgstr "삭제 취소" + + #: gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "예(_Y)" ++msgstr "예" + + #: gtk/deprecated/gtkuimanager.c:1782 + #, c-format +@@ -1526,16 +1526,16 @@ + + #: gtk/gtkaboutdialog.c:703 + msgid "C_redits" +-msgstr "만든 사람(_R)" ++msgstr "만든 사람" + + #: gtk/gtkaboutdialog.c:711 + msgid "_License" +-msgstr "라이선스(_L)" ++msgstr "라이선스" + + #: gtk/gtkaboutdialog.c:720 gtk/gtkcustompaperunixdialog.c:329 + #: gtk/gtkmessagedialog.c:948 gtk/ui/gtkassistant.ui:144 + msgid "_Close" +-msgstr "닫기(_C)" ++msgstr "닫기" + + #: gtk/gtkaboutdialog.c:1004 + msgid "Could not show link" +@@ -2205,7 +2205,7 @@ + + #: gtk/gtkcolorswatch.c:360 + msgid "C_ustomize" +-msgstr "사용자 지정(_U)" ++msgstr "사용자 지정" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2241,11 +2241,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "너비(_W):" ++msgstr "너비:" + + #: gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "높이(_H):" ++msgstr "높이:" + + #: gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2253,19 +2253,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "위(_T):" ++msgstr "위:" + + #: gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "아래(_B):" ++msgstr "아래:" + + #: gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "왼쪽(_L):" ++msgstr "왼쪽:" + + #: gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "오른쪽(_R):" ++msgstr "오른쪽:" + + #: gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2273,29 +2273,29 @@ + + #: gtk/gtkentry.c:9596 gtk/gtklabel.c:6688 gtk/gtktextview.c:9528 + msgid "Cu_t" +-msgstr "잘라내기(_T)" ++msgstr "잘라내기" + + #: gtk/gtkentry.c:9600 gtk/gtklabel.c:6689 gtk/gtktextview.c:9532 + msgid "_Copy" +-msgstr "복사(_C)" ++msgstr "복사" + + #: gtk/gtkentry.c:9604 gtk/gtklabel.c:6690 gtk/gtktextview.c:9534 + msgid "_Paste" +-msgstr "붙여넣기(_P)" ++msgstr "붙여넣기" + + #: gtk/gtkentry.c:9607 gtk/gtkfilechooserwidget.c:1503 + #: gtk/gtkfilechooserwidget.c:2338 gtk/gtklabel.c:6692 gtk/gtktextview.c:9537 + msgid "_Delete" +-msgstr "삭제(_D)" ++msgstr "삭제" + + #: gtk/gtkentry.c:9618 gtk/gtklabel.c:6701 gtk/gtktextview.c:9551 + msgid "Select _All" +-msgstr "모두 선택(_A)" ++msgstr "모두 선택" + + # 키보드에 써 있는 단어이므로 번역하지 않는다 + #: gtk/gtkentry.c:9628 gtk/gtktextview.c:9561 + msgid "Insert _Emoji" +-msgstr "에모지 입력(_E)" ++msgstr "에모지 입력" + + #: gtk/gtkentry.c:9804 gtk/gtktextview.c:9785 + msgid "Select all" +@@ -2341,18 +2341,18 @@ + + #: gtk/gtkfilechooserdialog.c:542 + msgid "_Name" +-msgstr "이름(_N)" ++msgstr "이름" + + #. Open item is always present + #: gtk/gtkfilechoosernative.c:546 gtk/gtkfilechoosernative.c:631 + #: gtk/gtkplacessidebar.c:3628 gtk/gtkplacessidebar.c:3696 + #: gtk/gtkplacesview.c:1705 + msgid "_Open" +-msgstr "열기(_O)" ++msgstr "열기" + + #: gtk/gtkfilechoosernative.c:631 gtk/inspector/css-editor.c:202 + msgid "_Save" +-msgstr "저장(_S)" ++msgstr "저장" + + #: gtk/gtkfilechoosernativequartz.c:331 gtk/ui/gtkfilechooserwidget.ui:435 + msgid "Select which types of files are shown" +@@ -2502,48 +2502,48 @@ + + #: gtk/gtkfilechooserwidget.c:2333 + msgid "_Visit File" +-msgstr "파일 보기(_V)" ++msgstr "파일 보기" + + #: gtk/gtkfilechooserwidget.c:2334 + msgid "_Open With File Manager" +-msgstr "파일 관리자로 열기(_O)" ++msgstr "파일 관리자로 열기" + + #: gtk/gtkfilechooserwidget.c:2335 + msgid "_Copy Location" +-msgstr "위치 복사(_C)" ++msgstr "위치 복사" + + #: gtk/gtkfilechooserwidget.c:2336 + msgid "_Add to Bookmarks" +-msgstr "책갈피에 추가(_A)" ++msgstr "책갈피에 추가" + + #: gtk/gtkfilechooserwidget.c:2337 gtk/gtkplacessidebar.c:2744 + #: gtk/ui/gtkfilechooserwidget.ui:569 + msgid "_Rename" +-msgstr "이름 바꾸기(_R)" ++msgstr "이름 바꾸기" + + #: gtk/gtkfilechooserwidget.c:2339 + msgid "_Move to Trash" +-msgstr "휴지통으로 옮기기(_M)" ++msgstr "휴지통으로 옮기기" + + #: gtk/gtkfilechooserwidget.c:2343 + msgid "Show _Hidden Files" +-msgstr "숨긴 파일 표시(_H)" ++msgstr "숨긴 파일 표시" + + #: gtk/gtkfilechooserwidget.c:2344 + msgid "Show _Size Column" +-msgstr "크기 열 표시(_S)" ++msgstr "크기 열 표시" + + #: gtk/gtkfilechooserwidget.c:2345 + msgid "Show T_ype Column" +-msgstr "종류 열 표시(_Y)" ++msgstr "종류 열 표시" + + #: gtk/gtkfilechooserwidget.c:2346 + msgid "Show _Time" +-msgstr "시간 표시(_T)" ++msgstr "시간 표시" + + #: gtk/gtkfilechooserwidget.c:2347 + msgid "Sort _Folders before Files" +-msgstr "폴더를 파일보다 앞에 정렬(_F)" ++msgstr "폴더를 파일보다 앞에 정렬" + + #. this is the header for the location column in the print dialog + #: gtk/gtkfilechooserwidget.c:2629 gtk/inspector/css-node-tree.ui:141 +@@ -2554,7 +2554,7 @@ + #. Label + #: gtk/gtkfilechooserwidget.c:2722 + msgid "_Name:" +-msgstr "이름(_N):" ++msgstr "이름:" + + #: gtk/gtkfilechooserwidget.c:3347 gtk/gtkfilechooserwidget.c:3361 + #, c-format +@@ -2688,7 +2688,7 @@ + + #: gtk/gtkfilechooserwidget.c:6579 gtk/gtkprintunixdialog.c:677 + msgid "_Replace" +-msgstr "바꾸기(_R)" ++msgstr "바꾸기" + + #: gtk/gtkfilechooserwidget.c:6798 + msgid "You do not have access to the specified folder." +@@ -2838,12 +2838,12 @@ + #. Open Link + #: gtk/gtklabel.c:6669 + msgid "_Open Link" +-msgstr "링크 열기(_O)" ++msgstr "링크 열기" + + #. Copy Link Address + #: gtk/gtklabel.c:6678 + msgid "Copy _Link Address" +-msgstr "링크 주소 복사(_L)" ++msgstr "링크 주소 복사" + + #: gtk/gtk-launch.c:42 + msgid "Show program version" +@@ -2990,15 +2990,15 @@ + + #: gtk/gtkmessagedialog.c:956 + msgid "_No" +-msgstr "아니요(_N)" ++msgstr "아니요" + + #: gtk/gtkmessagedialog.c:957 + msgid "_Yes" +-msgstr "예(_Y)" ++msgstr "예" + + #: gtk/gtkmountoperation.c:595 + msgid "Co_nnect" +-msgstr "연결(_N)" ++msgstr "연결" + + #: gtk/gtkmountoperation.c:668 + msgid "Connect As" +@@ -3006,19 +3006,19 @@ + + #: gtk/gtkmountoperation.c:677 + msgid "_Anonymous" +-msgstr "익명(_A)" ++msgstr "익명" + + #: gtk/gtkmountoperation.c:686 + msgid "Registered U_ser" +-msgstr "등록한 사용자(_S)" ++msgstr "등록한 사용자" + + #: gtk/gtkmountoperation.c:697 + msgid "_Username" +-msgstr "사용자 이름(_U)" ++msgstr "사용자 이름" + + #: gtk/gtkmountoperation.c:702 + msgid "_Domain" +-msgstr "도메인(_D)" ++msgstr "도메인" + + #: gtk/gtkmountoperation.c:711 + msgid "Volume type" +@@ -3026,11 +3026,11 @@ + + #: gtk/gtkmountoperation.c:721 + msgid "_Hidden" +-msgstr "감춤(_H)" ++msgstr "감춤" + + #: gtk/gtkmountoperation.c:724 + msgid "_Windows system" +-msgstr "윈도우 시스템(_W)" ++msgstr "윈도우 시스템" + + # Personal Iteration Multiplier, 풀든 아니든 번역하든 어려우므로 그냥 PIM으로 + # 쓴다. +@@ -3040,19 +3040,19 @@ + + #: gtk/gtkmountoperation.c:733 + msgid "_Password" +-msgstr "암호(_P)" ++msgstr "암호" + + #: gtk/gtkmountoperation.c:755 + msgid "Forget password _immediately" +-msgstr "즉시 암호 지우기(_I)" ++msgstr "즉시 암호 지우기" + + #: gtk/gtkmountoperation.c:765 + msgid "Remember password until you _logout" +-msgstr "로그아웃할 때까지 암호 저장(_L)" ++msgstr "로그아웃할 때까지 암호 저장" + + #: gtk/gtkmountoperation.c:775 + msgid "Remember _forever" +-msgstr "계속 암호 저장(_F)" ++msgstr "계속 암호 저장" + + #: gtk/gtkmountoperation.c:1170 + #, c-format +@@ -3066,7 +3066,7 @@ + + #: gtk/gtkmountoperation.c:1389 + msgid "_End Process" +-msgstr "프로세스 중지(_E)" ++msgstr "프로세스 중지" + + #: gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -3230,45 +3230,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: gtk/gtkplacessidebar.c:2337 gtk/gtkplacessidebar.c:3716 + msgid "_Start" +-msgstr "시작(_S)" ++msgstr "시작" + + #: gtk/gtkplacessidebar.c:2338 gtk/gtkplacessidebar.c:3717 + msgid "_Stop" +-msgstr "중지(_S)" ++msgstr "중지" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: gtk/gtkplacessidebar.c:2345 + msgid "_Power On" +-msgstr "전원 켜기(_P)" ++msgstr "전원 켜기" + + #: gtk/gtkplacessidebar.c:2346 + msgid "_Safely Remove Drive" +-msgstr "안전하게 드라이브 제거(_S)" ++msgstr "안전하게 드라이브 제거" + + #: gtk/gtkplacessidebar.c:2350 + msgid "_Connect Drive" +-msgstr "드라이브 연결(_C)" ++msgstr "드라이브 연결" + + #: gtk/gtkplacessidebar.c:2351 + msgid "_Disconnect Drive" +-msgstr "드라이브 연결 해제(_D)" ++msgstr "드라이브 연결 해제" + + #: gtk/gtkplacessidebar.c:2355 + msgid "_Start Multi-disk Device" +-msgstr "다중 디스크 장치 시작(_S)" ++msgstr "다중 디스크 장치 시작" + + #: gtk/gtkplacessidebar.c:2356 + msgid "_Stop Multi-disk Device" +-msgstr "다중 디스크 장치 중지(_S)" ++msgstr "다중 디스크 장치 중지" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: gtk/gtkplacessidebar.c:2361 + msgid "_Unlock Device" +-msgstr "장치 잠금 해제(_U)" ++msgstr "장치 잠금 해제" + + #: gtk/gtkplacessidebar.c:2362 + msgid "_Lock Device" +-msgstr "장치 잠그기(_L)" ++msgstr "장치 잠그기" + + #: gtk/gtkplacessidebar.c:2400 gtk/gtkplacessidebar.c:3397 + #, c-format +@@ -3323,20 +3323,20 @@ + #: gtk/gtkplacessidebar.c:3633 gtk/gtkplacessidebar.c:3699 + #: gtk/gtkplacesview.c:1715 + msgid "Open in New _Tab" +-msgstr "새 탭에서 열기(_T)" ++msgstr "새 탭에서 열기" + + #: gtk/gtkplacessidebar.c:3639 gtk/gtkplacessidebar.c:3702 + #: gtk/gtkplacesview.c:1726 + msgid "Open in New _Window" +-msgstr "새 창에서 열기(_W)" ++msgstr "새 창에서 열기" + + #: gtk/gtkplacessidebar.c:3706 + msgid "_Add Bookmark" +-msgstr "책갈피 추가(_A)" ++msgstr "책갈피 추가" + + #: gtk/gtkplacessidebar.c:3707 + msgid "_Remove" +-msgstr "제거(_R)" ++msgstr "제거" + + #: gtk/gtkplacessidebar.c:3708 + msgid "Rename…" +@@ -3344,19 +3344,19 @@ + + #: gtk/gtkplacessidebar.c:3712 gtk/gtkplacesview.c:1760 + msgid "_Mount" +-msgstr "마운트(_M)" ++msgstr "마운트" + + #: gtk/gtkplacessidebar.c:3713 gtk/gtkplacesview.c:1750 + msgid "_Unmount" +-msgstr "마운트 해제(_U)" ++msgstr "마운트 해제" + + #: gtk/gtkplacessidebar.c:3714 + msgid "_Eject" +-msgstr "빼기(_E)" ++msgstr "빼기" + + #: gtk/gtkplacessidebar.c:3715 + msgid "_Detect Media" +-msgstr "미디어 검색(_D)" ++msgstr "미디어 검색" + + #: gtk/gtkplacessidebar.c:4161 gtk/gtkplacesview.c:1122 + msgid "Computer" +@@ -3378,7 +3378,7 @@ + #. Restore from Cancel to Connect + #: gtk/gtkplacesview.c:1250 gtk/ui/gtkplacesview.ui:317 + msgid "Con_nect" +-msgstr "연결(_N)" ++msgstr "연결" + + #. if it wasn't cancelled show a dialog + #: gtk/gtkplacesview.c:1393 +@@ -3388,7 +3388,7 @@ + #. Allow to cancel the operation + #: gtk/gtkplacesview.c:1494 + msgid "Cance_l" +-msgstr "취소(_L)" ++msgstr "취소" + + #: gtk/gtkplacesview.c:1657 + msgid "AppleTalk" +@@ -3431,11 +3431,11 @@ + + #: gtk/gtkplacesview.c:1750 + msgid "_Disconnect" +-msgstr "연결 끊기(_D)" ++msgstr "연결 끊기" + + #: gtk/gtkplacesview.c:1760 + msgid "_Connect" +-msgstr "연결(_C)" ++msgstr "연결" + + #: gtk/gtkplacesview.c:1901 + msgid "Unable to get remote server location" +@@ -3474,7 +3474,7 @@ + + #: gtk/gtkprintbackend.c:849 + msgid "_Remember password" +-msgstr "암호 저장(_R)" ++msgstr "암호 저장" + + #: gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3627,11 +3627,11 @@ + + #: gtk/gtkprintunixdialog.c:746 + msgid "Pre_view" +-msgstr "미리보기(_V)" ++msgstr "미리보기" + + #: gtk/gtkprintunixdialog.c:748 + msgid "_Print" +-msgstr "인쇄(_P)" ++msgstr "인쇄" + + #: gtk/gtkprintunixdialog.c:861 + msgid "Getting printer information failed" +@@ -3732,19 +3732,19 @@ + + #: gtk/gtkrecentchooserdefault.c:1689 + msgid "Copy _Location" +-msgstr "위치 복사(_L)" ++msgstr "위치 복사" + + #: gtk/gtkrecentchooserdefault.c:1700 + msgid "_Remove From List" +-msgstr "목록에서 제거(_R)" ++msgstr "목록에서 제거" + + #: gtk/gtkrecentchooserdefault.c:1707 + msgid "_Clear List" +-msgstr "목록 지우기(_C)" ++msgstr "목록 지우기" + + #: gtk/gtkrecentchooserdefault.c:1719 + msgid "Show _Private Resources" +-msgstr "개인 리소스 표시(_P)" ++msgstr "개인 리소스 표시" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3837,7 +3837,7 @@ + + #: gtk/gtkshortcutssection.c:451 + msgid "_Show All" +-msgstr "모두 보이기(_S)" ++msgstr "모두 보이기" + + #: gtk/gtkshortcutsshortcut.c:136 + msgid "Two finger pinch" +@@ -4005,43 +4005,43 @@ + + #: gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM 왼쪽에서-오른쪽으로 표시(_L)" ++msgstr "LRM 왼쪽에서-오른쪽으로 표시" + + #: gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM 오른쪽에서-왼쪽으로 표시(_R)" ++msgstr "RLM 오른쪽에서-왼쪽으로 표시" + + #: gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +-msgstr "LRE 왼쪽에서-오른쪽으로 임베딩(_E)" ++msgstr "LRE 왼쪽에서-오른쪽으로 임베딩" + + #: gtk/gtktextutil.c:60 + msgid "RLE Right-to-left e_mbedding" +-msgstr "RLE 오른쪽에서-왼쪽으로 임베딩(_M)" ++msgstr "RLE 오른쪽에서-왼쪽으로 임베딩" + + #: gtk/gtktextutil.c:61 + msgid "LRO Left-to-right _override" +-msgstr "LRO 왼쪽에서-오른쪽으로 번복(_O)" ++msgstr "LRO 왼쪽에서-오른쪽으로 번복" + + #: gtk/gtktextutil.c:62 + msgid "RLO Right-to-left o_verride" +-msgstr "RLO 오른쪽에서-왼쪽으로 번복(_V)" ++msgstr "RLO 오른쪽에서-왼쪽으로 번복" + + #: gtk/gtktextutil.c:63 + msgid "PDF _Pop directional formatting" +-msgstr "PDF 방향 형식 팝(pop)하기(_P)" ++msgstr "PDF 방향 형식 팝(pop)하기" + + #: gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS 너비 0 공백(_Z)" ++msgstr "ZWS 너비 0 공백" + + #: gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +-msgstr "ZWJ 너비 0 결합(_J)" ++msgstr "ZWJ 너비 0 결합" + + #: gtk/gtktextutil.c:66 + msgid "ZWNJ Zero width _non-joiner" +-msgstr "ZWNJ 너비 0 결합 금지(_N)" ++msgstr "ZWNJ 너비 0 결합 금지" + + # ATK 메세지 + #: gtk/gtkvolumebutton.c:189 +@@ -7111,11 +7111,11 @@ + + #: gtk/ui/gtkappchooserdialog.ui:78 + msgid "_View All Applications" +-msgstr "모든 프로그램 보기(_V)" ++msgstr "모든 프로그램 보기" + + #: gtk/ui/gtkappchooserdialog.ui:86 + msgid "_Find New Applications" +-msgstr "새 프로그램 찾기(_F)" ++msgstr "새 프로그램 찾기" + + #: gtk/ui/gtkappchooserwidget.ui:119 + msgid "No applications found." +@@ -7155,15 +7155,15 @@ + + #: gtk/ui/gtkassistant.ui:68 + msgid "_Next" +-msgstr "다음(_N)" ++msgstr "다음" + + #: gtk/ui/gtkassistant.ui:88 + msgid "_Back" +-msgstr "뒤로(_B)" ++msgstr "뒤로" + + #: gtk/ui/gtkassistant.ui:107 + msgid "_Finish" +-msgstr "마치기(_F)" ++msgstr "마치기" + + #: gtk/ui/gtkcolorchooserdialog.ui:6 + msgid "Select a Color" +@@ -7290,11 +7290,11 @@ + + #: gtk/ui/gtkfilechooserwidget.ui:504 + msgid "_Create" +-msgstr "만들기(_C)" ++msgstr "만들기" + + #: gtk/ui/gtkfontchooserdialog.ui:6 + msgid "Select Font" +-msgstr "글꼴 선택(_L)" ++msgstr "글꼴 선택" + + #: gtk/ui/gtkfontchooserwidget.ui:53 + msgid "Search font name" +@@ -7314,15 +7314,15 @@ + + #: gtk/ui/gtkpagesetupunixdialog.ui:47 + msgid "_Format for:" +-msgstr "다음 프린터에 대한 형식(_F):" ++msgstr "다음 프린터에 대한 형식:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:80 gtk/ui/gtkprintunixdialog.ui:747 + msgid "_Paper size:" +-msgstr "용지 크기(_P):" ++msgstr "용지 크기:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:122 + msgid "_Orientation:" +-msgstr "방향(_O):" ++msgstr "방향:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:152 gtk/ui/gtkprintunixdialog.ui:794 + msgid "Portrait" +@@ -7376,7 +7376,7 @@ + + #: gtk/ui/gtkplacesview.ui:307 + msgid "Connect to _Server" +-msgstr "서버에 연결(_S)" ++msgstr "서버에 연결" + + #: gtk/ui/gtkplacesview.ui:340 + msgid "Enter server address…" +@@ -7397,19 +7397,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:201 + msgid "_All Pages" +-msgstr "모든 페이지(_A)" ++msgstr "모든 페이지" + + #: gtk/ui/gtkprintunixdialog.ui:216 + msgid "C_urrent Page" +-msgstr "현재 페이지(_U)" ++msgstr "현재 페이지" + + #: gtk/ui/gtkprintunixdialog.ui:233 + msgid "Se_lection" +-msgstr "선택(_L)" ++msgstr "선택" + + #: gtk/ui/gtkprintunixdialog.ui:249 + msgid "Pag_es:" +-msgstr "페이지(_E):" ++msgstr "페이지:" + + #: gtk/ui/gtkprintunixdialog.ui:252 gtk/ui/gtkprintunixdialog.ui:270 + #: gtk/ui/gtkprintunixdialog.ui:277 +@@ -7430,15 +7430,15 @@ + + #: gtk/ui/gtkprintunixdialog.ui:334 + msgid "Copie_s:" +-msgstr "인쇄 매수(_S):" ++msgstr "인쇄 매수:" + + #: gtk/ui/gtkprintunixdialog.ui:361 + msgid "C_ollate" +-msgstr "한 부씩 인쇄(_O)" ++msgstr "한 부씩 인쇄" + + #: gtk/ui/gtkprintunixdialog.ui:375 + msgid "_Reverse" +-msgstr "마지막 페이지부터(_R)" ++msgstr "마지막 페이지부터" + + #: gtk/ui/gtkprintunixdialog.ui:452 + msgid "Layout" +@@ -7446,19 +7446,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:475 + msgid "T_wo-sided:" +-msgstr "양면(_W):" ++msgstr "양면:" + + #: gtk/ui/gtkprintunixdialog.ui:500 + msgid "Pages per _side:" +-msgstr "한 장당 페이지 수(_S):" ++msgstr "한 장당 페이지 수:" + + #: gtk/ui/gtkprintunixdialog.ui:527 + msgid "Page or_dering:" +-msgstr "페이지 순서(_D):" ++msgstr "페이지 순서:" + + #: gtk/ui/gtkprintunixdialog.ui:553 + msgid "_Only print:" +-msgstr "다음만 인쇄(_O):" ++msgstr "다음만 인쇄:" + + #: gtk/ui/gtkprintunixdialog.ui:570 + msgid "All sheets" +@@ -7474,7 +7474,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:585 + msgid "Sc_ale:" +-msgstr "크기 조정(_A):" ++msgstr "크기 조정:" + + #: gtk/ui/gtkprintunixdialog.ui:649 + msgid "Paper" +@@ -7482,19 +7482,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:672 + msgid "Paper _type:" +-msgstr "용지 종류(_T):" ++msgstr "용지 종류:" + + #: gtk/ui/gtkprintunixdialog.ui:697 + msgid "Paper _source:" +-msgstr "용지 공급(_S):" ++msgstr "용지 공급:" + + #: gtk/ui/gtkprintunixdialog.ui:722 + msgid "Output t_ray:" +-msgstr "출력 트레이(_R):" ++msgstr "출력 트레이:" + + #: gtk/ui/gtkprintunixdialog.ui:776 + msgid "Or_ientation:" +-msgstr "방향(_I):" ++msgstr "방향:" + + #: gtk/ui/gtkprintunixdialog.ui:876 + msgid "Job Details" +@@ -7502,11 +7502,11 @@ + + #: gtk/ui/gtkprintunixdialog.ui:899 + msgid "Pri_ority:" +-msgstr "우선순위(_O):" ++msgstr "우선순위:" + + #: gtk/ui/gtkprintunixdialog.ui:923 + msgid "_Billing info:" +-msgstr "요금 정보(_B):" ++msgstr "요금 정보:" + + #: gtk/ui/gtkprintunixdialog.ui:967 + msgid "Print Document" +@@ -7515,12 +7515,12 @@ + #. this is one of the choices for the print at option in the print dialog + #: gtk/ui/gtkprintunixdialog.ui:987 + msgid "_Now" +-msgstr "지금(_N)" ++msgstr "지금" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: gtk/ui/gtkprintunixdialog.ui:1003 + msgid "A_t:" +-msgstr "시각(_T):" ++msgstr "시각:" + + # 한국어도 오전/오후 파싱 동작함 + # ( https://bugzilla.gnome.org/show_bug.cgi?id=568571 ) +@@ -7543,7 +7543,7 @@ + #. this is one of the choices for the print at option in the print dialog. It means that the print job will not be printed until it explicitly gets 'released'. + #: gtk/ui/gtkprintunixdialog.ui:1050 + msgid "On _hold" +-msgstr "보류(_H)" ++msgstr "보류" + + #: gtk/ui/gtkprintunixdialog.ui:1054 gtk/ui/gtkprintunixdialog.ui:1055 + msgid "Hold the job until it is explicitly released" +@@ -7556,12 +7556,12 @@ + #. this is the label used for the option in the print dialog that controls the front cover page. + #: gtk/ui/gtkprintunixdialog.ui:1115 + msgid "Be_fore:" +-msgstr "앞에(_F):" ++msgstr "앞에:" + + #. this is the label used for the option in the print dialog that controls the back cover page. + #: gtk/ui/gtkprintunixdialog.ui:1139 + msgid "_After:" +-msgstr "뒤에(_A):" ++msgstr "뒤에:" + + #: gtk/ui/gtkprintunixdialog.ui:1181 + msgid "Job" +@@ -8360,7 +8360,7 @@ + #: modules/printbackends/file/gtkprintbackendfile.c:676 + #: modules/printbackends/test/gtkprintbackendtest.c:501 + msgid "Pages per _sheet:" +-msgstr "한 장당 페이지 수(_S):" ++msgstr "한 장당 페이지 수:" + + #: modules/printbackends/file/gtkprintbackendfile.c:735 + msgid "File" +@@ -8368,7 +8368,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "출력 형식(_O)" ++msgstr "출력 형식" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:394 + msgid "Print to LPR" +diff -urN a/po/mai.po b/po/mai.po +--- a/po/mai.po 2025-06-09 19:54:59.533434779 -0700 ++++ b/po/mai.po 2025-06-09 20:11:48.852738068 -0700 +@@ -356,7 +356,7 @@ + #. Add the license button + #: gtk/gtkaboutdialog.c:635 + msgid "_License" +-msgstr "लाइसेंस (_L)" ++msgstr "लाइसेंस" + + #: gtk/gtkaboutdialog.c:839 + msgid "Could not show link" +@@ -612,7 +612,7 @@ + + #: gtk/gtkcolorsel.c:417 + msgid "_Hue:" +-msgstr "वर्ण (_H):" ++msgstr "वर्ण:" + + #: gtk/gtkcolorsel.c:418 + msgid "Position on the color wheel." +@@ -620,7 +620,7 @@ + + #: gtk/gtkcolorsel.c:420 + msgid "_Saturation:" +-msgstr "संतृप्ति (_S):" ++msgstr "संतृप्ति:" + + #: gtk/gtkcolorsel.c:421 + #, fuzzy +@@ -629,7 +629,7 @@ + + #: gtk/gtkcolorsel.c:422 + msgid "_Value:" +-msgstr "मान (_V):" ++msgstr "मान:" + + #: gtk/gtkcolorsel.c:423 + msgid "Brightness of the color." +@@ -637,7 +637,7 @@ + + #: gtk/gtkcolorsel.c:424 + msgid "_Red:" +-msgstr "लाल (_R):" ++msgstr "लाल:" + + #: gtk/gtkcolorsel.c:425 + msgid "Amount of red light in the color." +@@ -645,7 +645,7 @@ + + #: gtk/gtkcolorsel.c:426 + msgid "_Green:" +-msgstr "हरिअर (_G):" ++msgstr "हरिअर:" + + #: gtk/gtkcolorsel.c:427 + msgid "Amount of green light in the color." +@@ -653,7 +653,7 @@ + + #: gtk/gtkcolorsel.c:428 + msgid "_Blue:" +-msgstr "नीला (_B):" ++msgstr "नीला:" + + #: gtk/gtkcolorsel.c:429 + msgid "Amount of blue light in the color." +@@ -681,7 +681,7 @@ + + #: gtk/gtkcolorsel.c:500 + msgid "_Palette:" +-msgstr "पैलेट (_P):" ++msgstr "पैलेट:" + + #: gtk/gtkcolorsel.c:529 + msgid "Color Wheel" +@@ -714,7 +714,7 @@ + + #: gtk/gtkcolorsel.c:1396 + msgid "_Save color here" +-msgstr "रँग एतय सहेजू (_S)" ++msgstr "रँग एतय सहेजू" + + #: gtk/gtkcolorsel.c:1601 + msgid "" +@@ -762,11 +762,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1059 + msgid "_Width:" +-msgstr "चओड़ाइ (_W):" ++msgstr "चओड़ाइ:" + + #: gtk/gtkcustompaperunixdialog.c:1071 + msgid "_Height:" +-msgstr "उँचाइ (_H):" ++msgstr "उँचाइ:" + + #: gtk/gtkcustompaperunixdialog.c:1083 + msgid "Paper Size" +@@ -774,19 +774,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1092 + msgid "_Top:" +-msgstr "उप्पर (_T):" ++msgstr "उप्पर:" + + #: gtk/gtkcustompaperunixdialog.c:1104 + msgid "_Bottom:" +-msgstr "नीच्चाँ (_B):" ++msgstr "नीच्चाँ:" + + #: gtk/gtkcustompaperunixdialog.c:1116 + msgid "_Left:" +-msgstr "बामाँ (_L):" ++msgstr "बामाँ:" + + #: gtk/gtkcustompaperunixdialog.c:1128 + msgid "_Right:" +-msgstr "दहिन्ना (_R):" ++msgstr "दहिन्ना:" + + #: gtk/gtkcustompaperunixdialog.c:1169 + msgid "Paper Margins" +@@ -794,11 +794,11 @@ + + #: gtk/gtkentry.c:8601 gtk/gtktextview.c:8248 + msgid "Input _Methods" +-msgstr "इनपुट विधिसभ (_M)" ++msgstr "इनपुट विधिसभ" + + #: gtk/gtkentry.c:8615 gtk/gtktextview.c:8262 + msgid "_Insert Unicode Control Character" +-msgstr "यूनिकोड कन्ट्रोल संप्रतीक प्रविष्ट करू (_I)" ++msgstr "यूनिकोड कन्ट्रोल संप्रतीक प्रविष्ट करू" + + #: gtk/gtkentry.c:10015 + msgid "Caps Lock and Num Lock are on" +@@ -934,11 +934,11 @@ + #. Column header for the file chooser's shortcuts pane + #: gtk/gtkfilechooserdefault.c:3650 + msgid "_Places" +-msgstr "स्थान (_P)" ++msgstr "स्थान" + + #: gtk/gtkfilechooserdefault.c:3706 + msgid "_Add" +-msgstr "जोड़ू (_A)" ++msgstr "जोड़ू" + + #: gtk/gtkfilechooserdefault.c:3713 + msgid "Add the selected folder to the Bookmarks" +@@ -946,7 +946,7 @@ + + #: gtk/gtkfilechooserdefault.c:3718 + msgid "_Remove" +-msgstr "हटाबू (_R)" ++msgstr "हटाबू" + + #: gtk/gtkfilechooserdefault.c:3860 + msgid "Could not select file" +@@ -954,15 +954,15 @@ + + #: gtk/gtkfilechooserdefault.c:4035 + msgid "_Add to Bookmarks" +-msgstr "एकटा पुस्तकचिह्न जोड़ू (_A)" ++msgstr "एकटा पुस्तकचिह्न जोड़ू" + + #: gtk/gtkfilechooserdefault.c:4048 + msgid "Show _Hidden Files" +-msgstr "नुकल फाइलसभ देखाबू (_H)" ++msgstr "नुकल फाइलसभ देखाबू" + + #: gtk/gtkfilechooserdefault.c:4055 + msgid "Show _Size Column" +-msgstr "आकारक स्तंभ देखाउ (_S)" ++msgstr "आकारक स्तंभ देखाउ" + + #: gtk/gtkfilechooserdefault.c:4281 + msgid "Files" +@@ -983,11 +983,11 @@ + #. Label + #: gtk/gtkfilechooserdefault.c:4624 gtk/gtkprinteroptionwidget.c:801 + msgid "_Name:" +-msgstr "नाम (_N):" ++msgstr "नाम:" + + #: gtk/gtkfilechooserdefault.c:4667 + msgid "_Browse for other folders" +-msgstr "आन फोल्डरसभ लेल ब्राउज करू (_B)" ++msgstr "आन फोल्डरसभ लेल ब्राउज करू" + + #: gtk/gtkfilechooserdefault.c:4937 + msgid "Type a file name" +@@ -1000,7 +1000,7 @@ + + #: gtk/gtkfilechooserdefault.c:4990 + msgid "_Location:" +-msgstr "स्थान (_L):" ++msgstr "स्थान:" + + #: gtk/gtkfilechooserdefault.c:5194 + msgid "Save in _folder:" +@@ -1061,7 +1061,7 @@ + + #: gtk/gtkfilechooserdefault.c:8005 gtk/gtkprintunixdialog.c:491 + msgid "_Replace" +-msgstr "बदलू (_R)" ++msgstr "बदलू" + + #: gtk/gtkfilechooserdefault.c:8658 + msgid "Could not start the search process" +@@ -1180,11 +1180,11 @@ + + #: gtk/gtkfontsel.c:370 + msgid "_Family:" +-msgstr "परिवारः (_F)" ++msgstr "परिवारः" + + #: gtk/gtkfontsel.c:376 + msgid "_Style:" +-msgstr "शैली (_S):" ++msgstr "शैली:" + + #: gtk/gtkfontsel.c:382 + msgid "Si_ze:" +@@ -1193,7 +1193,7 @@ + #. create the text entry widget + #: gtk/gtkfontsel.c:559 + msgid "_Preview:" +-msgstr "पूर्वावलोकन (_P):" ++msgstr "पूर्वावलोकन:" + + #: gtk/gtkfontsel.c:1659 + msgid "Font Selection" +@@ -1253,12 +1253,12 @@ + #. Open Link + #: gtk/gtklabel.c:6202 + msgid "_Open Link" +-msgstr "लिंक खोलू (_O)" ++msgstr "लिंक खोलू" + + #. Copy Link Address + #: gtk/gtklabel.c:6214 + msgid "Copy _Link Address" +-msgstr "लिंक पता कापी करू (_L)" ++msgstr "लिंक पता कापी करू" + + #: gtk/gtklinkbutton.c:449 + msgid "Copy URL" +@@ -1329,15 +1329,15 @@ + + #: gtk/gtkmountoperation.c:605 + msgid "_Username:" +-msgstr "प्रयोक्ता नाम (_U):" ++msgstr "प्रयोक्ता नाम:" + + #: gtk/gtkmountoperation.c:610 + msgid "_Domain:" +-msgstr "डोमेन (_D):" ++msgstr "डोमेन:" + + #: gtk/gtkmountoperation.c:616 + msgid "_Password:" +-msgstr "गुड़किल्ली (_P):" ++msgstr "गुड़किल्ली:" + + #: gtk/gtkmountoperation.c:634 + msgid "Forget password _immediately" +@@ -1363,7 +1363,7 @@ + + #: gtk/gtkmountoperation.c:1103 + msgid "_End Process" +-msgstr "प्रक्रिया बन्न करू (_E)" ++msgstr "प्रक्रिया बन्न करू" + + #: gtk/gtkmountoperation-stub.c:64 + #, fuzzy, c-format +@@ -1435,15 +1435,15 @@ + + #: gtk/gtkpagesetupunixdialog.c:909 + msgid "_Format for:" +-msgstr "एकरा लेल प्रारूप (_F):" ++msgstr "एकरा लेल प्रारूप:" + + #: gtk/gtkpagesetupunixdialog.c:931 gtk/gtkprintunixdialog.c:3456 + msgid "_Paper size:" +-msgstr "कागज क' आकार (_P):" ++msgstr "कागज क' आकार:" + + #: gtk/gtkpagesetupunixdialog.c:962 + msgid "_Orientation:" +-msgstr "अभिमुखन (_O):" ++msgstr "अभिमुखन:" + + #: gtk/gtkpagesetupunixdialog.c:1026 gtk/gtkprintunixdialog.c:3518 + msgid "Page Setup" +@@ -1476,7 +1476,7 @@ + + #: gtk/gtkprinteroptionwidget.c:813 + msgid "_Save in folder:" +-msgstr "फोल्डरमे सहेजू (_S):" ++msgstr "फोल्डरमे सहेजू:" + + #. translators: this string is the default job title for print + #. * jobs. %s gets replaced by the application name, %d gets replaced +@@ -1650,7 +1650,7 @@ + + #: gtk/gtkprintunixdialog.c:2190 + msgid "_All Pages" +-msgstr "सभटा पृष्ठ (_A)" ++msgstr "सभटा पृष्ठ" + + #: gtk/gtkprintunixdialog.c:2197 + msgid "C_urrent Page" +@@ -1691,7 +1691,7 @@ + + #: gtk/gtkprintunixdialog.c:2271 + msgid "_Reverse" +-msgstr "उनटल (_R)" ++msgstr "उनटल" + + #: gtk/gtkprintunixdialog.c:2291 + msgid "General" +@@ -1785,7 +1785,7 @@ + + #: gtk/gtkprintunixdialog.c:3359 + msgid "_Only print:" +-msgstr "सिर्फ मुद्रण (_O):" ++msgstr "सिर्फ मुद्रण:" + + #. In enum order + #: gtk/gtkprintunixdialog.c:3374 +@@ -1851,7 +1851,7 @@ + + #: gtk/gtkprintunixdialog.c:3564 + msgid "_Billing info:" +-msgstr "बिलिंग सूचना (_B):" ++msgstr "बिलिंग सूचना:" + + #: gtk/gtkprintunixdialog.c:3582 + msgid "Print Document" +@@ -1862,7 +1862,7 @@ + #. + #: gtk/gtkprintunixdialog.c:3591 + msgid "_Now" +-msgstr "आब (_N)" ++msgstr "आब" + + #: gtk/gtkprintunixdialog.c:3602 + msgid "A_t:" +@@ -1908,7 +1908,7 @@ + #. + #: gtk/gtkprintunixdialog.c:3682 + msgid "_After:" +-msgstr "क' बाद (_A):" ++msgstr "क' बाद:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -1984,19 +1984,19 @@ + + #: gtk/gtkrecentchooserdefault.c:1783 + msgid "Copy _Location" +-msgstr "स्थान कापी करू (_L)" ++msgstr "स्थान कापी करू" + + #: gtk/gtkrecentchooserdefault.c:1796 + msgid "_Remove From List" +-msgstr "सूची सँ मेटाबू (_R)" ++msgstr "सूची सँ मेटाबू" + + #: gtk/gtkrecentchooserdefault.c:1805 + msgid "_Clear List" +-msgstr "सूची साफ करू (_C)" ++msgstr "सूची साफ करू" + + #: gtk/gtkrecentchooserdefault.c:1819 + msgid "Show _Private Resources" +-msgstr "निज संसाधन देखाबू (_P)" ++msgstr "निज संसाधन देखाबू" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -2091,43 +2091,43 @@ + #: gtk/gtkstock.c:321 + msgctxt "Stock label" + msgid "_About" +-msgstr "परिचय (_A)" ++msgstr "परिचय" + + #: gtk/gtkstock.c:322 + msgctxt "Stock label" + msgid "_Add" +-msgstr "जोड़ू (_A)" ++msgstr "जोड़ू" + + #: gtk/gtkstock.c:323 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "लागू करू (_A)" ++msgstr "लागू करू" + + #: gtk/gtkstock.c:324 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "गाढ़ा (_B)" ++msgstr "गाढ़ा" + + #: gtk/gtkstock.c:325 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "रद करू (_C)" ++msgstr "रद करू" + + #: gtk/gtkstock.c:326 + #, fuzzy + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "सीडी-रोम (_C)" ++msgstr "सीडी-रोम" + + #: gtk/gtkstock.c:327 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "साफ़ करू (_C)" ++msgstr "साफ़ करू" + + #: gtk/gtkstock.c:328 + msgctxt "Stock label" + msgid "_Close" +-msgstr "बन्न करू (_C)" ++msgstr "बन्न करू" + + #: gtk/gtkstock.c:329 + msgctxt "Stock label" +@@ -2137,12 +2137,12 @@ + #: gtk/gtkstock.c:330 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "बदलू (_C)" ++msgstr "बदलू" + + #: gtk/gtkstock.c:331 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "कापी करू (_C)" ++msgstr "कापी करू" + + #: gtk/gtkstock.c:332 + msgctxt "Stock label" +@@ -2152,122 +2152,122 @@ + #: gtk/gtkstock.c:333 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "मेटाउ (_D)" ++msgstr "मेटाउ" + + #: gtk/gtkstock.c:334 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "त्यागू (_D)" ++msgstr "त्यागू" + + #: gtk/gtkstock.c:335 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "डिस्कनेक्ट (_D)..." ++msgstr "डिस्कनेक्ट..." + + #: gtk/gtkstock.c:336 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "क्रियान्वित करू (_E)" ++msgstr "क्रियान्वित करू" + + #: gtk/gtkstock.c:337 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "संपादन (_E)" ++msgstr "संपादन" + + #: gtk/gtkstock.c:338 + #, fuzzy + msgctxt "Stock label" + msgid "_File" +-msgstr "फाइलसभ (_F)" ++msgstr "फाइलसभ" + + #: gtk/gtkstock.c:339 + msgctxt "Stock label" + msgid "_Find" +-msgstr "ताकू (_F)" ++msgstr "ताकू" + + #: gtk/gtkstock.c:340 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ताकू आओर बदलू (_R)" ++msgstr "ताकू आओर बदलू" + + #: gtk/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "फ्लापी (_F)" ++msgstr "फ्लापी" + + #: gtk/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "फुलस्क्रीन (_F)" ++msgstr "फुलस्क्रीन" + + #: gtk/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "पूर्ण स्क्रीन छोड़ू (_L)" ++msgstr "पूर्ण स्क्रीन छोड़ू" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/gtkstock.c:345 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "नीच्चाँ (_B):" ++msgstr "नीच्चाँ:" + + #. This is a navigation label as in "go to the first page" + #: gtk/gtkstock.c:347 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "पहिल (_F)" ++msgstr "पहिल" + + #. This is a navigation label as in "go to the last page" + #: gtk/gtkstock.c:349 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "अंतिम (_L)" ++msgstr "अंतिम" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/gtkstock.c:351 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "उप्पर (_T):" ++msgstr "उप्पर:" + + #. This is a navigation label as in "go back" + #: gtk/gtkstock.c:353 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "पाछाँ (_B)" ++msgstr "पाछाँ" + + #. This is a navigation label as in "go down" + #: gtk/gtkstock.c:355 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "नीच्चाँ (_D)" ++msgstr "नीच्चाँ" + + #. This is a navigation label as in "go forward" + #: gtk/gtkstock.c:357 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "आगाँ (_F)" ++msgstr "आगाँ" + + #. This is a navigation label as in "go up" + #: gtk/gtkstock.c:359 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "उप्पर (_U)" ++msgstr "उप्पर" + + #: gtk/gtkstock.c:360 + #, fuzzy + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "हार्ड डिस्क (_H)" ++msgstr "हार्ड डिस्क" + + #: gtk/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Help" +-msgstr "मदति (_H)" ++msgstr "मदति" + + #: gtk/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Home" +-msgstr "घर (_H)" ++msgstr "घर" + + #: gtk/gtkstock.c:363 + msgctxt "Stock label" +@@ -2282,58 +2282,58 @@ + #: gtk/gtkstock.c:365 + msgctxt "Stock label" + msgid "_Index" +-msgstr "अनुक्रमणिका (_I)" ++msgstr "अनुक्रमणिका" + + #: gtk/gtkstock.c:366 + msgctxt "Stock label" + msgid "_Information" +-msgstr "जानकारी (_I)" ++msgstr "जानकारी" + + #: gtk/gtkstock.c:367 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "तिरछा (_I)" ++msgstr "तिरछा" + + #: gtk/gtkstock.c:368 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "एकरा पर जाउ (_J)" ++msgstr "एकरा पर जाउ " + + #. This is about text justification, "centered text" + #: gtk/gtkstock.c:370 + msgctxt "Stock label" + msgid "_Center" +-msgstr "केंद्र (_C)" ++msgstr "केंद्र" + + #. This is about text justification + #: gtk/gtkstock.c:372 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "भरू (_F)" ++msgstr "भरू" + + #. This is about text justification, "left-justified text" + #: gtk/gtkstock.c:374 + msgctxt "Stock label" + msgid "_Left" +-msgstr "बामाँ (_L):" ++msgstr "बामाँ:" + + #. This is about text justification, "right-justified text" + #: gtk/gtkstock.c:376 + msgctxt "Stock label" + msgid "_Right" +-msgstr "दहिन्ना (_R):" ++msgstr "दहिन्ना:" + + #. Media label, as in "fast forward" + #: gtk/gtkstock.c:379 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "आगाँ (_F)" ++msgstr "आगाँ" + + #. Media label, as in "next song" + #: gtk/gtkstock.c:381 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "अगिला (_N)" ++msgstr "अगिला" + + #. Media label, as in "pause music" + #: gtk/gtkstock.c:383 +@@ -2345,7 +2345,7 @@ + #: gtk/gtkstock.c:385 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "बजाउ (_P)" ++msgstr "बजाउ" + + #. Media label, as in "previous song" + #: gtk/gtkstock.c:387 +@@ -2357,7 +2357,7 @@ + #: gtk/gtkstock.c:389 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "रिकार्ड (_R)" ++msgstr "रिकार्ड" + + #. Media label + #: gtk/gtkstock.c:391 +@@ -2369,32 +2369,32 @@ + #: gtk/gtkstock.c:393 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "रोकू (_S)" ++msgstr "रोकू" + + #: gtk/gtkstock.c:394 + msgctxt "Stock label" + msgid "_Network" +-msgstr "संजाल (_N)" ++msgstr "संजाल" + + #: gtk/gtkstock.c:395 + msgctxt "Stock label" + msgid "_New" +-msgstr "नवीन (_N)" ++msgstr "नवीन" + + #: gtk/gtkstock.c:396 + msgctxt "Stock label" + msgid "_No" +-msgstr "नहि (_N)" ++msgstr "नहि" + + #: gtk/gtkstock.c:397 + msgctxt "Stock label" + msgid "_OK" +-msgstr "बेस (_O)" ++msgstr "बेस" + + #: gtk/gtkstock.c:398 + msgctxt "Stock label" + msgid "_Open" +-msgstr "खोलू (_O)" ++msgstr "खोलू" + + #. Page orientation + #: gtk/gtkstock.c:400 +@@ -2428,17 +2428,17 @@ + #: gtk/gtkstock.c:408 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "साटू (_P)" ++msgstr "साटू" + + #: gtk/gtkstock.c:409 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "वरीयता (_P)" ++msgstr "वरीयता" + + #: gtk/gtkstock.c:410 + msgctxt "Stock label" + msgid "_Print" +-msgstr "छापू (_P)" ++msgstr "छापू" + + #: gtk/gtkstock.c:411 + msgctxt "Stock label" +@@ -2448,128 +2448,128 @@ + #: gtk/gtkstock.c:412 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "गुण (_P)" ++msgstr "गुण" + + #: gtk/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "बाहर (_Q)" ++msgstr "बाहर" + + #: gtk/gtkstock.c:414 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "दोहराउ (_R)" ++msgstr "दोहराउ" + + #: gtk/gtkstock.c:415 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ताजा करू (_R)" ++msgstr "ताजा करू" + + #: gtk/gtkstock.c:416 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "हटाबू (_R)" ++msgstr "हटाबू" + + #: gtk/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "पुरान स्थितिमे लौटाबू (_R)" ++msgstr "पुरान स्थितिमे लौटाबू" + + #: gtk/gtkstock.c:418 + msgctxt "Stock label" + msgid "_Save" +-msgstr "सहेजू (_S)" ++msgstr "सहेजू" + + #: gtk/gtkstock.c:419 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "ई रूपेँ सहेजू (_A)" ++msgstr "ई रूपेँ सहेजू" + + #: gtk/gtkstock.c:420 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "सबहि चुनू (_A)" ++msgstr "सबहि चुनू" + + #: gtk/gtkstock.c:421 + msgctxt "Stock label" + msgid "_Color" +-msgstr "रँग (_C)" ++msgstr "रँग" + + #: gtk/gtkstock.c:422 + msgctxt "Stock label" + msgid "_Font" +-msgstr "फ़ॉन्ट (_F)" ++msgstr "फ़ॉन्ट" + + #. Sorting direction + #: gtk/gtkstock.c:424 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "आरोही क्रमसँ (_A)" ++msgstr "आरोही क्रमसँ" + + #. Sorting direction + #: gtk/gtkstock.c:426 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "अवरोही क्रमसँ (_D)" ++msgstr "अवरोही क्रमसँ" + + #: gtk/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "हिज्जे जाँच (_S)" ++msgstr "हिज्जे जाँच" + + #: gtk/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "रोकू (_S)" ++msgstr "रोकू" + + #. Font variant + #: gtk/gtkstock.c:430 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "लिखकए काटू (_S)" ++msgstr "लिखकए काटू" + + #: gtk/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "मेटोअनाइ वापिस लिअ'(_U)" ++msgstr "मेटोअनाइ वापिस लिअ'" + + #. Font variant + #: gtk/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "रेखांकित (_U)" ++msgstr "रेखांकित" + + #: gtk/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "पूर्ववत् करू (_U)" ++msgstr "पूर्ववत् करू" + + #: gtk/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "हँ (_Y)" ++msgstr "हँ" + + #. Zoom + #: gtk/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "सामान्य आकार (_N)" ++msgstr "सामान्य आकार" + + #. Zoom + #: gtk/gtkstock.c:439 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "सर्वोत्तम अनुरूप (_F)" ++msgstr "सर्वोत्तम अनुरूप" + + #: gtk/gtkstock.c:440 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "पैघ आकार (_I)" ++msgstr "पैघ आकार" + + #: gtk/gtkstock.c:441 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "छोट आकार (_O)" ++msgstr "छोट आकार" + + #: gtk/gtktextbufferrichtext.c:650 + #, c-format +@@ -2691,7 +2691,7 @@ + + #: gtk/gtktextutil.c:61 + msgid "RLM _Right-to-left mark" +-msgstr "RLM दहिन्ना-सँ-बम्माँ चिह्न (_R)" ++msgstr "RLM दहिन्ना-सँ-बम्माँ चिह्न" + + #: gtk/gtktextutil.c:62 + msgid "LRE Left-to-right _embedding" +@@ -2711,11 +2711,11 @@ + + #: gtk/gtktextutil.c:66 + msgid "PDF _Pop directional formatting" +-msgstr "पीडीएफ पाप डायरेक्शनल फार्मेटिंग (_P)" ++msgstr "पीडीएफ पाप डायरेक्शनल फार्मेटिंग" + + #: gtk/gtktextutil.c:67 + msgid "ZWS _Zero width space" +-msgstr "ZWS शून्य चओड़ाइ स्थान (_Z)" ++msgstr "ZWS शून्य चओड़ाइ स्थान" + + #: gtk/gtktextutil.c:68 + msgid "ZWJ Zero width _joiner" +@@ -3837,7 +3837,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:1014 + #, fuzzy + msgid "Domain:" +-msgstr "डोमेन (_D):" ++msgstr "डोमेन:" + + #: modules/printbackends/cups/gtkprintbackendcups.c:1044 + #, fuzzy, c-format +@@ -4152,7 +4152,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:651 + msgid "_Output format" +-msgstr "आउटपुट प्रारूप (_O)" ++msgstr "आउटपुट प्रारूप" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:395 + msgid "Print to LPR" +@@ -4869,13 +4869,13 @@ + #~ " की अहाँ सुनिश्चित अछि जे एकरे चुनब चाहैत छी?" + + #~ msgid "_New Folder" +-#~ msgstr "नवीन फ़ोल्डर (_N)" ++#~ msgstr "नवीन फ़ोल्डर" + + #~ msgid "De_lete File" + #~ msgstr "फाइल मेटाबू (_l)" + + #~ msgid "_Rename File" +-#~ msgstr "फाइल नाम बदलू (_R)" ++#~ msgstr "फाइल नाम बदलू" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -4885,7 +4885,7 @@ + #~ msgstr "नवीन फोल्डर" + + #~ msgid "_Folder name:" +-#~ msgstr "फोल्डर नाम (_F):" ++#~ msgstr "फोल्डर नाम:" + + #~ msgid "C_reate" + #~ msgstr "बनाबू (_r)" +@@ -4919,10 +4919,10 @@ + #~ msgstr "फाइल \"%s\" क' नाम बदलू:" + + #~ msgid "_Rename" +-#~ msgstr "नाम बदलू (_R)" ++#~ msgstr "नाम बदलू" + + #~ msgid "_Selection: " +-#~ msgstr "चयन (_S): " ++#~ msgstr "चयन: " + + #~ msgid "" + #~ "The filename \"%s\" couldn't be converted to UTF-8. (try setting the " +@@ -4944,7 +4944,7 @@ + #~ msgstr "गामा" + + #~ msgid "_Gamma value" +-#~ msgstr "गामा मान (_G)" ++#~ msgstr "गामा मान" + + #~ msgid "Input" + #~ msgstr "इनपुट" +@@ -4953,7 +4953,7 @@ + #~ msgstr "कोनो विस्तारित इनपुट अओजार नहि" + + #~ msgid "_Device:" +-#~ msgstr "युक्ति (_D): " ++#~ msgstr "युक्ति: " + + #~ msgid "Disabled" + #~ msgstr "अक्षम" +@@ -4965,7 +4965,7 @@ + #~ msgstr "विंडो" + + #~ msgid "_Mode:" +-#~ msgstr "मोड (_M):" ++#~ msgstr "मोड:" + + #~ msgid "Axes" + #~ msgstr "अक्ष" +@@ -4980,7 +4980,7 @@ + #~ msgstr "_Y:" + + #~ msgid "_Pressure:" +-#~ msgstr "दबाव (_P):" ++#~ msgstr "दबाव:" + + #~ msgid "X _tilt:" + #~ msgstr "X नत (_t):" +@@ -4989,7 +4989,7 @@ + #~ msgstr "Y नत (_i):" + + #~ msgid "_Wheel:" +-#~ msgstr "चक्र (_W):" ++#~ msgstr "चक्र:" + + #~ msgid "none" + #~ msgstr "किछु नहि" +diff -urN a/po/ml.po b/po/ml.po +--- a/po/ml.po 2025-06-09 19:54:59.537434818 -0700 ++++ b/po/ml.po 2025-06-09 20:11:48.876738380 -0700 +@@ -1830,7 +1830,7 @@ + + #: ../gtk/gtkfilechooserdefault.c:8309 ../gtk/gtkprintunixdialog.c:559 + msgid "_Replace" +-msgstr "മാറ്റി വേറെ സൂക്ഷിക്കുക (_R)" ++msgstr "മാറ്റി വേറെ സൂക്ഷിക്കുക" + + #: ../gtk/gtkfilechooserdefault.c:9116 + msgid "Could not start the search process" +@@ -2211,7 +2211,7 @@ + + #: ../gtk/gtkpagesetupunixdialog.c:946 + msgid "_Orientation:" +-msgstr "സംവേദനം (_O):" ++msgstr "സംവേദനം:" + + #: ../gtk/gtkpagesetupunixdialog.c:1006 ../gtk/gtkprintunixdialog.c:3531 + msgid "Page Setup" +@@ -2607,7 +2607,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3572 + msgid "_Billing info:" +-msgstr "ബില്ലിങ് വിവരം (_B): " ++msgstr "ബില്ലിങ് വിവരം: " + + #: ../gtk/gtkprintunixdialog.c:3587 + msgid "Print Document" +@@ -2618,7 +2618,7 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3594 + msgid "_Now" +-msgstr "ഉടന്‍ (_N)" ++msgstr "ഉടന്‍" + + #: ../gtk/gtkprintunixdialog.c:3603 + msgid "A_t:" +@@ -2664,7 +2664,7 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3672 + msgid "_After:" +-msgstr "ശേഷം (_A):" ++msgstr "ശേഷം:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -2724,19 +2724,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1774 + msgid "Copy _Location" +-msgstr "സ്ഥാനം പകര്‍ത്തുക (_L)" ++msgstr "സ്ഥാനം പകര്‍ത്തുക" + + #: ../gtk/gtkrecentchooserdefault.c:1787 + msgid "_Remove From List" +-msgstr "പട്ടികയില്‍ നിന്നും നീക്കം ചെയ്യുക (_R)" ++msgstr "പട്ടികയില്‍ നിന്നും നീക്കം ചെയ്യുക" + + #: ../gtk/gtkrecentchooserdefault.c:1796 + msgid "_Clear List" +-msgstr "പട്ടിക വെടിപ്പാക്കുക (_C)" ++msgstr "പട്ടിക വെടിപ്പാക്കുക" + + #: ../gtk/gtkrecentchooserdefault.c:1810 + msgid "Show _Private Resources" +-msgstr "സ്വകാര്യ ഉറവിടങ്ങള്‍ കാണിക്കുക (_P)" ++msgstr "സ്വകാര്യ ഉറവിടങ്ങള്‍ കാണിക്കുക" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -4941,7 +4941,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:729 + msgid "_Output format" +-msgstr "ഔട്ട്പുട്ട് രീതി (_O)" ++msgstr "ഔട്ട്പുട്ട് രീതി" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5773,13 +5773,13 @@ + #~ "നിങ്ങള്‍ക്കു് ഇതു് തെരഞ്ഞെടുക്കണമെന്നു് ഉറപ്പാണോ?" + + #~ msgid "_New Folder" +-#~ msgstr "പുതിയ അറ (_N)" ++#~ msgstr "പുതിയ അറ" + + #~ msgid "De_lete File" + #~ msgstr "ഫയല്‍ വെട്ടി നീക്കുക (_l)" + + #~ msgid "_Rename File" +-#~ msgstr "ഫയലിന്റെ പേരു് മാറ്റുക (_R)" ++#~ msgstr "ഫയലിന്റെ പേരു് മാറ്റുക" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -5883,7 +5883,7 @@ + #~ msgstr "Y t_ilt:" + + #~ msgid "_Wheel:" +-#~ msgstr "ചക്രം (_W):" ++#~ msgstr "ചക്രം:" + + #~ msgid "none" + #~ msgstr "ഒന്നുമില്ല" +diff -urN a/po/mr.po b/po/mr.po +--- a/po/mr.po 2025-06-09 19:54:59.537434818 -0700 ++++ b/po/mr.po 2025-06-09 20:11:48.904738744 -0700 +@@ -597,32 +597,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "विषयी(_A)" ++msgstr "विषयी" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "समावेष करा (_A)" ++msgstr "समावेष करा" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "ठळक (_B)" ++msgstr "ठळक" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "CD-ROM (_C)" ++msgstr "CD-ROM" + + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "पुसा (_C)" ++msgstr "पुसा" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "बंद करा (_C)" ++msgstr "बंद करा" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -639,7 +639,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "प्रत बनवा (_C)" ++msgstr "प्रत बनवा" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -649,7 +649,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "नष्ट करा (_D)" ++msgstr "नष्ट करा" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -675,95 +675,95 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "कार्यान्वीत करा (_E)" ++msgstr "कार्यान्वीत करा" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "फाइल (_F)" ++msgstr "फाइल" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "शोधा (_F)" ++msgstr "शोधा" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "शोधा व बदलवा (_R)" ++msgstr "शोधा व बदलवा" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "फ्लॉपी (_F)" ++msgstr "फ्लॉपी" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "पदडाभर (_F)" ++msgstr "पदडाभर" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "तळ (_B)" ++msgstr "तळ" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "पहिले (_F)" ++msgstr "पहिले" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "शेवटचे (_L)" ++msgstr "शेवटचे" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "वरील (_T)" ++msgstr "वरील" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "मागील (_B)" ++msgstr "मागील" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "खाली (_D)" ++msgstr "खाली" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "पुढे (_F)" ++msgstr "पुढे" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "वर (_U)" ++msgstr "वर" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "हार्ड डिस्क (_H)" ++msgstr "हार्ड डिस्क" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "मदत (_H)" ++msgstr "मदत" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "घर (_H)" ++msgstr "घर" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -773,58 +773,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "माहिती (_I)" ++msgstr "माहिती" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "इटॅलिक (_I)" ++msgstr "इटॅलिक" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "येथे जा (_J)" ++msgstr "येथे जा" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "मध्य (_C)" ++msgstr "मध्य" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "भरा (_F)" ++msgstr "भरा" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "डावे (_L)" ++msgstr "डावे" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "उजवे (_R)" ++msgstr "उजवे" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "पदडाभर सोडा (_L)" ++msgstr "पदडाभर सोडा" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "पुढे (_F)" ++msgstr "पुढे" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "पुढे (_N)" ++msgstr "पुढे" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -836,7 +836,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "चालवा (_P)" ++msgstr "चालवा" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -848,7 +848,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "रेकॉर्ड (_R)" ++msgstr "रेकॉर्ड" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -860,32 +860,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "थांबा (_S)" ++msgstr "थांबा" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "जाळं (_N)" ++msgstr "जाळं" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "नवीन (_N)" ++msgstr "नवीन" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "उघडा (_O)" ++msgstr "उघडा" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "चिकटवा (_P)" ++msgstr "चिकटवा" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "छपाई (_P)" ++msgstr "छपाई" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -895,86 +895,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "गुणधर्म (_P)" ++msgstr "गुणधर्म" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "बाहेर पडा (_Q)" ++msgstr "बाहेर पडा" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "पुनः करा (_R)" ++msgstr "पुनः करा" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "पुन्ह दाखल करा (_R)" ++msgstr "पुन्ह दाखल करा" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "काढूण टाका (_R)" ++msgstr "काढूण टाका" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "पूर्ववत करा (_R)" ++msgstr "पूर्ववत करा" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "साठवा (_S)" ++msgstr "साठवा" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "या नुरूप साठवा (_A)" ++msgstr "या नुरूप साठवा" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "सर्व निवडा (_A)" ++msgstr "सर्व निवडा" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "वाढता क्रम (_A)" ++msgstr "वाढता क्रम" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "उतरता क्रम (_D)" ++msgstr "उतरता क्रम" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "शुद्धलेखन तपासणी(_S)" ++msgstr "शुद्धलेखन तपासणी" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "थांबा (_S)" ++msgstr "थांबा" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "खोडून काढा (_S)" ++msgstr "खोडून काढा" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "अधोरेखीत करा (_U)" ++msgstr "अधोरेखीत करा" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "पूर्ववत करा (_U)" ++msgstr "पूर्ववत करा" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -985,23 +985,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "सर्वसाधारण आकार (_N)" ++msgstr "सर्वसाधारण आकार" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "सर्वोत्तम भरणी (_F)" ++msgstr "सर्वोत्तम भरणी" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "दृष्य बदल लहान करा (_I)" ++msgstr "दृष्य बदल लहान करा" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "दृष्य बदल मोठे करा (_O)" ++msgstr "दृष्य बदल मोठे करा" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1061,7 +1061,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "रंगछटा(_H):" ++msgstr "रंगछटा:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1077,7 +1077,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "मूल्य(_V) :" ++msgstr "मूल्य :" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1085,7 +1085,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "लाल(_R):" ++msgstr "लाल:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1093,7 +1093,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "हिरवा(_G):" ++msgstr "हिरवा:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1101,7 +1101,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "नीळा(_B):" ++msgstr "नीळा:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1130,7 +1130,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "पटल(_P):" ++msgstr "पटल:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1165,7 +1165,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "रंगसाठा(_S) येथे करा" ++msgstr "रंगसाठा येथे करा" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1191,7 +1191,7 @@ + #| msgctxt "Stock label" + #| msgid "_Cancel" + msgid "_Cancel" +-msgstr "रद्द करा (_C)" ++msgstr "रद्द करा" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1199,13 +1199,13 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "निवडा (_S)" ++msgstr "निवडा" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + #| msgctxt "Stock label" + #| msgid "_Help" + msgid "_Help" +-msgstr "मदत (_H)" ++msgstr "मदत" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1219,11 +1219,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "परिवार(_F):" ++msgstr "परिवार:" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "शैली(_S):" ++msgstr "शैली:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1232,14 +1232,14 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "अवलोकन(_P):" ++msgstr "अवलोकन:" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + #| msgctxt "Stock label" + #| msgid "_Apply" + msgid "_Apply" +-msgstr "लागू करा (_A)" ++msgstr "लागू करा" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 +@@ -1247,7 +1247,7 @@ + #| msgctxt "Stock label" + #| msgid "_OK" + msgid "_OK" +-msgstr "ठीक आहे (_O)" ++msgstr "ठीक आहे" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1265,12 +1265,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "लागू करा (_A)" ++msgstr "लागू करा" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "रद्द करा (_C)" ++msgstr "रद्द करा" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1280,37 +1280,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "रुपांतरीत करा (_C)" ++msgstr "रुपांतरीत करा" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "वगळा (_D)" ++msgstr "वगळा" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "जोडणी तोडा (_D)" ++msgstr "जोडणी तोडा" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "संपादीत करा (_E)" ++msgstr "संपादीत करा" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "निर्देशांक (_I)" ++msgstr "निर्देशांक" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "नाही (_N)" ++msgstr "नाही" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ठिक आहे (_O)" ++msgstr "ठिक आहे" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1344,27 +1344,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "आवड निवड (_P)" ++msgstr "आवड निवड" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "रंग (_C)" ++msgstr "रंग" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "फॉन्ट (_F)" ++msgstr "फॉन्ट" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "नष्ट करणे अशक्य (_U)" ++msgstr "नष्ट करणे अशक्य" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "होय (_Y)" ++msgstr "होय" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2044,7 +2044,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "पसंतीचे करा (_C)" ++msgstr "पसंतीचे करा" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2061,7 +2061,7 @@ + #| msgctxt "Stock label" + #| msgid "_Close" + msgid "_Close" +-msgstr "बंद करा (_C)" ++msgstr "बंद करा" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2088,11 +2088,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "रुंदी(_W):" ++msgstr "रुंदी:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "उंची(_H):" ++msgstr "उंची:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2100,19 +2100,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "वरील(_T):" ++msgstr "वरील:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "तळ (_B):" ++msgstr "तळ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "डावीकडे(_L):" ++msgstr "डावीकडे:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "उजवा(_R):" ++msgstr "उजवा:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2130,26 +2130,26 @@ + #| msgctxt "Stock label" + #| msgid "_Copy" + msgid "_Copy" +-msgstr "प्रत बनवा (_C)" ++msgstr "प्रत बनवा" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + #| msgctxt "Stock label" + #| msgid "_Paste" + msgid "_Paste" +-msgstr "चिकटवा (_P)" ++msgstr "चिकटवा" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + #| msgctxt "Stock label" + #| msgid "_Delete" + msgid "_Delete" +-msgstr "नष्ट करा (_D)" ++msgstr "नष्ट करा" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + #| msgctxt "Stock label" + #| msgid "Select _All" + msgid "Select _All" +-msgstr "सर्व नीवडा (_A)" ++msgstr "सर्व नीवडा" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2172,7 +2172,7 @@ + #| msgctxt "Stock label" + #| msgid "_Open" + msgid "_Open" +-msgstr "उघडा (_O)" ++msgstr "उघडा" + + #: ../gtk/gtkfilechooserbutton.c:2139 + #| msgid "Other..." +@@ -2250,29 +2250,29 @@ + #: ../gtk/gtkfilechooserwidget.c:1665 + #| msgid "_Visit this file" + msgid "_Visit File" +-msgstr "फाइलला भेट द्या (_V)" ++msgstr "फाइलला भेट द्या" + + #: ../gtk/gtkfilechooserwidget.c:1668 + #| msgid "Copy _Location" + msgid "_Copy Location" +-msgstr "ठिकाणाचे प्रत करा (_C)" ++msgstr "ठिकाणाचे प्रत करा" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "खूणगाठींमध्ये जमा करा(_A)" ++msgstr "खूणगाठींमध्ये जमा करा" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "लपवलेल्या फाइली दाखवा(_H)" ++msgstr "लपवलेल्या फाइली दाखवा" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "स्तंभ आकार दर्शवा (_S)" ++msgstr "स्तंभ आकार दर्शवा" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "नाव(_N):" ++msgstr "नाव:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2331,7 +2331,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "बदलवा(_R)" ++msgstr "बदलवा" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2442,12 +2442,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "दुवा उघडा (_O)" ++msgstr "दुवा उघडा" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "दुवा पत्त्याचे प्रत बनवा (_L)" ++msgstr "दुवा पत्त्याचे प्रत बनवा" + + #: ../gtk/gtk-launch.c:71 + #| msgid "APPLICATION [URI...] - launch an APPLICATION with URI." +@@ -2597,13 +2597,13 @@ + #| msgctxt "Stock label" + #| msgid "_No" + msgid "_No" +-msgstr "नाही (_N)" ++msgstr "नाही" + + #: ../gtk/gtkmessagedialog.c:949 + #| msgctxt "Stock label" + #| msgid "_Yes" + msgid "_Yes" +-msgstr "होय (_Y)" ++msgstr "होय" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2615,7 +2615,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "निनावी (_A)" ++msgstr "निनावी" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2623,15 +2623,15 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "वापरकर्तानाव (_U)" ++msgstr "वापरकर्तानाव" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "डोमेन (_D)" ++msgstr "डोमेन" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "पासवर्ड (_P)" ++msgstr "पासवर्ड" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +@@ -2656,7 +2656,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "कार्य समाप्त करा (_E)" ++msgstr "कार्य समाप्त करा" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2833,51 +2833,51 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2230 ../gtk/gtkplacessidebar.c:3351 + msgid "_Start" +-msgstr "सुरू करा (_S)" ++msgstr "सुरू करा" + + #: ../gtk/gtkplacessidebar.c:2231 ../gtk/gtkplacessidebar.c:3358 + #| msgctxt "Stock label, media" + #| msgid "_Stop" + msgid "_Stop" +-msgstr "थांबवा (_S)" ++msgstr "थांबवा" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2238 + msgid "_Power On" +-msgstr "सुरू करा (_P)" ++msgstr "सुरू करा" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Safely Remove Drive" +-msgstr "ड्राइव्ह सुरक्षितरित्या काढून टाका (_S)" ++msgstr "ड्राइव्ह सुरक्षितरित्या काढून टाका" + + #: ../gtk/gtkplacessidebar.c:2243 + #| msgid "Connect As" + msgid "_Connect Drive" +-msgstr "ड्राइव्हशी जोडणी करा (_C)" ++msgstr "ड्राइव्हशी जोडणी करा" + + #: ../gtk/gtkplacessidebar.c:2244 + #| msgctxt "Stock label" + #| msgid "_Disconnect" + msgid "_Disconnect Drive" +-msgstr "ड्राइव्ह खंडीत करा (_D)" ++msgstr "ड्राइव्ह खंडीत करा" + + #: ../gtk/gtkplacessidebar.c:2248 + msgid "_Start Multi-disk Device" +-msgstr "बहु-डिस्क साधन सुरू करा (_S)" ++msgstr "बहु-डिस्क साधन सुरू करा" + + #: ../gtk/gtkplacessidebar.c:2249 + msgid "_Stop Multi-disk Device" +-msgstr "बहु-डिस्क साधन थांबवा (_S)" ++msgstr "बहु-डिस्क साधन थांबवा" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2254 + #| msgid "Unlock" + msgid "_Unlock Drive" +-msgstr "ड्राइव्ह खुले करा (_U)" ++msgstr "ड्राइव्ह खुले करा" + + #: ../gtk/gtkplacessidebar.c:2255 + msgid "_Lock Drive" +-msgstr "ड्राइव्ह कुलूपबंद करा (_L)" ++msgstr "ड्राइव्ह कुलूपबंद करा" + + #: ../gtk/gtkplacessidebar.c:2284 ../gtk/gtkplacessidebar.c:3033 + #, c-format +@@ -2917,16 +2917,16 @@ + + #: ../gtk/gtkplacessidebar.c:3281 + msgid "Open in New _Tab" +-msgstr "नवीन टॅबमध्ये उगडा (_T)" ++msgstr "नवीन टॅबमध्ये उगडा" + + #: ../gtk/gtkplacessidebar.c:3290 + msgid "Open in New _Window" +-msgstr "नवीन पटलात उघडा (_W)" ++msgstr "नवीन पटलात उघडा" + + #: ../gtk/gtkplacessidebar.c:3299 + #| msgid "_Add to Bookmarks" + msgid "_Add Bookmark" +-msgstr "वाचनखूण समाविष्ट करा (_A)" ++msgstr "वाचनखूण समाविष्ट करा" + + #: ../gtk/gtkplacessidebar.c:3305 + msgid "Remove" +@@ -2939,19 +2939,19 @@ + + #: ../gtk/gtkplacessidebar.c:3323 + msgid "_Mount" +-msgstr "माउंट करा (_M)" ++msgstr "माउंट करा" + + #: ../gtk/gtkplacessidebar.c:3330 + msgid "_Unmount" +-msgstr "माउंट अशक्य करा (_U)" ++msgstr "माउंट अशक्य करा" + + #: ../gtk/gtkplacessidebar.c:3337 + msgid "_Eject" +-msgstr "बाहेर काढा (_E)" ++msgstr "बाहेर काढा" + + #: ../gtk/gtkplacessidebar.c:3344 + msgid "_Detect Media" +-msgstr "मिडीया शोधा (_D)" ++msgstr "मिडीया शोधा" + + #: ../gtk/gtkplacessidebar.c:3953 + msgid "Computer" +@@ -2964,7 +2964,7 @@ + #: ../gtk/gtkprintbackend.c:833 + #| msgid "Remember password until you _logout" + msgid "_Remember password" +-msgstr "पासवर्ड लक्षात ठेवा (_R)" ++msgstr "पासवर्ड लक्षात ठेवा" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3118,7 +3118,7 @@ + #| msgctxt "Stock label" + #| msgid "_Print" + msgid "_Print" +-msgstr "छपाई (_P)" ++msgstr "छपाई" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3222,19 +3222,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "ठिकाण प्रतिलिपी करा(_L)" ++msgstr "ठिकाण प्रतिलिपी करा" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "यादीतून काढून टाका(_R)" ++msgstr "यादीतून काढून टाका" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "यादी साफ करा(_C)" ++msgstr "यादी साफ करा" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "खाजगी साधने दाखवा(_P)" ++msgstr "खाजगी साधने दाखवा" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3438,11 +3438,11 @@ + + #: ../gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM डावीकडून उजवीकडे चिन्ह (_L)" ++msgstr "LRM डावीकडून उजवीकडे चिन्ह" + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM उजवीकडून डावीकडे चिन्ह (_R)" ++msgstr "RLM उजवीकडून डावीकडे चिन्ह" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3462,11 +3462,11 @@ + + #: ../gtk/gtktextutil.c:63 + msgid "PDF _Pop directional formatting" +-msgstr "PDF दिशानीय स्वरूपन दर्शवा (_P)" ++msgstr "PDF दिशानीय स्वरूपन दर्शवा" + + #: ../gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS झीरो विड्थ् स्पेस् (_Z)" ++msgstr "ZWS झीरो विड्थ् स्पेस्" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +@@ -3601,7 +3601,7 @@ + #| msgctxt "Stock label" + #| msgid "_Save" + msgid "_Save" +-msgstr "साठवा (_S)" ++msgstr "साठवा" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -5410,7 +5410,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "आऊटपुट स्वरूप(_O)" ++msgstr "आऊटपुट स्वरूप" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5472,12 +5472,12 @@ + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + #| msgid "Related Applications" + msgid "_View All Applications" +-msgstr "सर्व ॲप्लिकेशन्सचे अवलोकन (_V)" ++msgstr "सर्व ॲप्लिकेशन्सचे अवलोकन" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + #| msgid "_Find applications online" + msgid "_Find New Applications" +-msgstr "नवीन ॲप्लिकेशन्स शोधा (_F)" ++msgstr "नवीन ॲप्लिकेशन्स शोधा" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + #| msgid "_Find applications online" +@@ -5517,17 +5517,17 @@ + #| msgctxt "Stock label, media" + #| msgid "_Next" + msgid "_Next" +-msgstr "पुढील (_N)" ++msgstr "पुढील" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + #| msgctxt "Stock label, navigation" + #| msgid "_Back" + msgid "_Back" +-msgstr "मागील (_B)" ++msgstr "मागील" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "पूर्ण करा (_F)" ++msgstr "पूर्ण करा" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5585,7 +5585,7 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "ठिकाण(_L):" ++msgstr "ठिकाण:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5622,16 +5622,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "यासाठी स्वरुप(_F):" ++msgstr "यासाठी स्वरुप:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "कागदाचा आकार(_P):" ++msgstr "कागदाचा आकार:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "प्राङ्मुखीकरण(_O):" ++msgstr "प्राङ्मुखीकरण:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5676,7 +5676,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "सर्व पान (_A)" ++msgstr "सर्व पान" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5718,7 +5718,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "उलटे(_R)" ++msgstr "उलटे" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5738,7 +5738,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "फक्त मुद्रण(_O):" ++msgstr "फक्त मुद्रण:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5786,7 +5786,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "बिलिंगविषयी माहिती(_B):" ++msgstr "बिलिंगविषयी माहिती:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5795,7 +5795,7 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "आत्ता (_N)" ++msgstr "आत्ता" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 +@@ -5841,7 +5841,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "नंतर(_A):" ++msgstr "नंतर:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5911,7 +5911,7 @@ + #~ msgstr "श्रेय (_r)" + + #~ msgid "_License" +-#~ msgstr "परवाना(_L)" ++#~ msgstr "परवाना" + + #~ msgid "Homepage" + #~ msgstr "मुख्यपान" +@@ -5954,10 +5954,10 @@ + #~ msgstr "चालू ठेवा (_o)" + + #~ msgid "Input _Methods" +-#~ msgstr "इनपुट पद्धती (_M)" ++#~ msgstr "इनपुट पद्धती" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "युनिकोड नियंत्रण अक्षर घाला(_I)" ++#~ msgstr "युनिकोड नियंत्रण अक्षर घाला" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "फाइलविषयी माहिती मिळवता आली नाही" +@@ -5990,13 +5990,13 @@ + #~ msgstr "जागा" + + #~ msgid "_Places" +-#~ msgstr "जागा(_P)" ++#~ msgstr "जागा" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "निवडलेला फोल्डर खूणगाठींमध्ये जमा करा" + + #~ msgid "_Copy file’s location" +-#~ msgstr "फाइलच्या ठिकाणाचे प्रत बनवा (_C)" ++#~ msgstr "फाइलच्या ठिकाणाचे प्रत बनवा" + + #~ msgid "Type a file name" + #~ msgstr "फाइलचे नाव टाइप करा" +@@ -6035,7 +6035,7 @@ + #~ msgstr "फोल्डर निवडा" + + #~ msgid "_Save in folder:" +-#~ msgstr "फोल्डरमध्ये सुरक्षित करा (_S):" ++#~ msgstr "फोल्डरमध्ये सुरक्षित करा:" + + #~ msgid "X screen to use" + #~ msgstr "वापरावयाची X स्क्रीन" +@@ -6057,13 +6057,13 @@ + #~ msgstr "Caps Lock सुरू आहे" + + #~ msgid "_Add" +-#~ msgstr "जोडा(_A)" ++#~ msgstr "जोडा" + + #~ msgid "_Remove" +-#~ msgstr "नष्ट करा(_R)" ++#~ msgstr "नष्ट करा" + + #~ msgid "_Browse for other folders" +-#~ msgstr "इतर फोल्डरसाठी ब्राउज करा(_B)" ++#~ msgstr "इतर फोल्डरसाठी ब्राउज करा" + + #~ msgid "Invalid path" + #~ msgstr "अवैध मार्ग" +diff -urN a/po/ne.po b/po/ne.po +--- a/po/ne.po 2025-06-09 19:54:59.541434856 -0700 ++++ b/po/ne.po 2025-06-09 20:11:48.944739263 -0700 +@@ -1331,7 +1331,7 @@ + #: gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "सम्पादन (_E)" ++msgstr "सम्पादन" + + #: gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" +@@ -7157,7 +7157,7 @@ + + #: gtk/ui/gtkassistant.ui:107 + msgid "_Finish" +-msgstr "समाप्त (_F)" ++msgstr "समाप्त" + + #: gtk/ui/gtkcolorchooserdialog.ui:6 + msgid "Select a Color" +diff -urN a/po/or.po b/po/or.po +--- a/po/or.po 2025-06-09 19:54:59.549434934 -0700 ++++ b/po/or.po 2025-06-09 20:11:48.968739574 -0700 +@@ -176,12 +176,12 @@ + #: ../gdk/keyname-table.h:3965 + msgctxt "keyboard label" + msgid "Page_Up" +-msgstr "ପୃଷ୍ଠା ଉପରକୁ କରନ୍ତୁ (_U)" ++msgstr "ପୃଷ୍ଠା ଉପରକୁ କରନ୍ତୁ" + + #: ../gdk/keyname-table.h:3966 + msgctxt "keyboard label" + msgid "Page_Down" +-msgstr "ପୃଷ୍ଠା ତଳକୁ କରନ୍ତୁ (_D)" ++msgstr "ପୃଷ୍ଠା ତଳକୁ କରନ୍ତୁ" + + #: ../gdk/keyname-table.h:3967 + msgctxt "keyboard label" +@@ -645,7 +645,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "ରଙ୍ଗ (_H):" ++msgstr "ରଙ୍ଗ:" + + #: ../gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -661,7 +661,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "ମୂଲ୍ଯ (_V):" ++msgstr "ମୂଲ୍ଯ:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -669,7 +669,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "ନାଲି (_R):" ++msgstr "ନାଲି:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -677,7 +677,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "ସବୁଜ (_G):" ++msgstr "ସବୁଜ:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -685,7 +685,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "ନୀଳ (_B):" ++msgstr "ନୀଳ:" + + #: ../gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -714,7 +714,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "ଥାଳି (_P):" ++msgstr "ଥାଳି:" + + #: ../gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -753,7 +753,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1491 + msgid "_Save color here" +-msgstr "ଏଠାରେ ରଙ୍ଗ ସଂରକ୍ଷିତ କରନ୍ତୁ (_S)" ++msgstr "ଏଠାରେ ରଙ୍ଗ ସଂରକ୍ଷିତ କରନ୍ତୁ" + + #: ../gtk/deprecated/gtkcolorsel.c:1695 + msgid "" +@@ -773,7 +773,7 @@ + #: ../gtk/gtkcolorchooserdialog.c:150 ../gtk/gtkfontchooserdialog.c:174 + #: ../gtk/gtkprinteroptionwidget.c:550 + msgid "_Select" +-msgstr "ବାଛନ୍ତୁ (_S)" ++msgstr "ବାଛନ୍ତୁ" + + #: ../gtk/deprecated/gtkcolorseldialog.c:219 + msgid "Color Selection" +@@ -787,11 +787,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Family:" +-msgstr "ଶ୍ରେଣୀ (_F):" ++msgstr "ଶ୍ରେଣୀ:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "_Style:" +-msgstr "ଶୈଳୀ (_S):" ++msgstr "ଶୈଳୀ:" + + #: ../gtk/deprecated/gtkfontsel.c:407 + msgid "Si_ze:" +@@ -800,7 +800,7 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:584 + msgid "_Preview:" +-msgstr "ପୂର୍ବାବଲୋକନ (_P):" ++msgstr "ପୂର୍ବାବଲୋକନ:" + + #: ../gtk/deprecated/gtkfontsel.c:1720 ../gtk/gtkfontchooserdialog.c:183 + msgid "Font Selection" +@@ -834,7 +834,7 @@ + #. Add the license button + #: ../gtk/gtkaboutdialog.c:764 + msgid "_License" +-msgstr "ଅନୁମତି ପତ୍ର (_L)" ++msgstr "ଅନୁମତି ପତ୍ର" + + #: ../gtk/gtkaboutdialog.c:980 + msgid "Could not show link" +@@ -947,7 +947,7 @@ + #: ../gtk/gtkappchooserdialog.c:188 + #| msgid "Find applications online" + msgid "_Find applications online" +-msgstr "ଅନଲାଇନରେ ପ୍ରୟୋଗଗୁଡ଼ିକୁ ଖୋଜନ୍ତୁ (_F)" ++msgstr "ଅନଲାଇନରେ ପ୍ରୟୋଗଗୁଡ଼ିକୁ ଖୋଜନ୍ତୁ" + + #. Translators: %s is a filename + #: ../gtk/gtkappchooserdialog.c:332 +@@ -1026,11 +1026,11 @@ + + #: ../gtk/gtkassistant.c:1011 + msgid "Go _Back" +-msgstr "ପଛକୁ ଯାଆନ୍ତୁ (_B)" ++msgstr "ପଛକୁ ଯାଆନ୍ତୁ" + + #: ../gtk/gtkassistant.c:1015 + msgid "_Finish" +-msgstr "ସମାପ୍ତ କରନ୍ତୁ (_F)" ++msgstr "ସମାପ୍ତ କରନ୍ତୁ" + + #: ../gtk/gtkbuilder-menus.c:220 + #, c-format +@@ -1445,7 +1445,7 @@ + + #: ../gtk/gtkcolorswatch.c:447 + msgid "_Customize" +-msgstr "ଇଚ୍ଛାରୂପଣ କରନ୍ତୁ (_C)" ++msgstr "ଇଚ୍ଛାରୂପଣ କରନ୍ତୁ" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -1482,11 +1482,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1109 + msgid "_Width:" +-msgstr "ଓସାର (_W):" ++msgstr "ଓସାର:" + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Height:" +-msgstr "ଉଚ୍ଛତା (_H):" ++msgstr "ଉଚ୍ଛତା:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "Paper Size" +@@ -1494,19 +1494,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1140 + msgid "_Top:" +-msgstr "ଉପର (_T):" ++msgstr "ଉପର:" + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Bottom:" +-msgstr "ତଳ (_B):" ++msgstr "ତଳ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Left:" +-msgstr "ବାମ (_L):" ++msgstr "ବାମ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Right:" +-msgstr "ଡାହାଣ (_R):" ++msgstr "ଡାହାଣ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1212 + msgid "Paper Margins" +@@ -1514,11 +1514,11 @@ + + #: ../gtk/gtkentry.c:9204 ../gtk/gtktextview.c:8684 + msgid "Input _Methods" +-msgstr "ନିବେଶ ପ୍ରଣାଳୀ (_M)" ++msgstr "ନିବେଶ ପ୍ରଣାଳୀ" + + #: ../gtk/gtkentry.c:9218 ../gtk/gtktextview.c:8698 + msgid "_Insert Unicode Control Character" +-msgstr "ୟୁନିକୋଡ ନିୟନ୍ତ୍ରଣ ଅକ୍ଷର ଭର୍ତ୍ତି କରନ୍ତୁ (_I)" ++msgstr "ୟୁନିକୋଡ ନିୟନ୍ତ୍ରଣ ଅକ୍ଷର ଭର୍ତ୍ତି କରନ୍ତୁ" + + #: ../gtk/gtkentry.c:10316 + msgid "Caps Lock is on" +@@ -1704,7 +1704,7 @@ + #. Column header for the file chooser's shortcuts pane + #: ../gtk/gtkfilechooserdefault.c:3615 + msgid "_Places" +-msgstr "ସ୍ଥାନ (_P)" ++msgstr "ସ୍ଥାନ" + + #: ../gtk/gtkfilechooserdefault.c:3695 + msgid "Add the selected folder to the Bookmarks" +@@ -1716,23 +1716,23 @@ + + #: ../gtk/gtkfilechooserdefault.c:4181 + msgid "_Visit this file" +-msgstr "ଏହି ଫାଇଲକୁ ପରିଦର୍ଶନ କରନ୍ତୁ (_V)" ++msgstr "ଏହି ଫାଇଲକୁ ପରିଦର୍ଶନ କରନ୍ତୁ" + + #: ../gtk/gtkfilechooserdefault.c:4184 + msgid "_Copy file’s location" +-msgstr "ଫାଇଲ ଅବସ୍ଥାନକୁ ନକଲ କରନ୍ତୁ (_C)" ++msgstr "ଫାଇଲ ଅବସ୍ଥାନକୁ ନକଲ କରନ୍ତୁ" + + #: ../gtk/gtkfilechooserdefault.c:4187 + msgid "_Add to Bookmarks" +-msgstr "ଚିହ୍ନିତ ସ୍ଥାନଗୁଡ଼ିକରେ ଯୋଗାନ୍ତୁ (_A)" ++msgstr "ଚିହ୍ନିତ ସ୍ଥାନଗୁଡ଼ିକରେ ଯୋଗାନ୍ତୁ" + + #: ../gtk/gtkfilechooserdefault.c:4194 + msgid "Show _Hidden Files" +-msgstr "ଲୁକ୍କାୟିତ ଫାଇଲଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ (_H)" ++msgstr "ଲୁକ୍କାୟିତ ଫାଇଲଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ" + + #: ../gtk/gtkfilechooserdefault.c:4197 + msgid "Show _Size Column" +-msgstr "ସ୍ତମ୍ଭ ଆକାର ଦର୍ଶାନ୍ତୁ (_S)" ++msgstr "ସ୍ତମ୍ଭ ଆକାର ଦର୍ଶାନ୍ତୁ" + + #: ../gtk/gtkfilechooserdefault.c:4422 + msgid "Files" +@@ -1753,7 +1753,7 @@ + #. Label + #: ../gtk/gtkfilechooserdefault.c:4603 + msgid "_Name:" +-msgstr "ନାମ (_N):" ++msgstr "ନାମ:" + + #: ../gtk/gtkfilechooserdefault.c:4834 + msgid "Type a file name" +@@ -1778,7 +1778,7 @@ + + #: ../gtk/gtkfilechooserdefault.c:5057 + msgid "_Location:" +-msgstr "ଅବସ୍ଥାନ (_L):" ++msgstr "ଅବସ୍ଥାନ:" + + #: ../gtk/gtkfilechooserdefault.c:5507 + msgid "Save in _folder:" +@@ -1837,7 +1837,7 @@ + + #: ../gtk/gtkfilechooserdefault.c:8309 ../gtk/gtkprintunixdialog.c:559 + msgid "_Replace" +-msgstr "ବଦଳାନ୍ତୁ (_R)" ++msgstr "ବଦଳାନ୍ତୁ" + + #: ../gtk/gtkfilechooserdefault.c:9116 + msgid "Could not start the search process" +@@ -1929,12 +1929,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6141 + msgid "_Open Link" +-msgstr "ସଂଯୋଗ ଖୋଲନ୍ତୁ (_O)" ++msgstr "ସଂଯୋଗ ଖୋଲନ୍ତୁ" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6153 + msgid "Copy _Link Address" +-msgstr "ସଂଯୋଗ ଠିକଣାକୁ ନକଲ କରନ୍ତୁ (_L)" ++msgstr "ସଂଯୋଗ ଠିକଣାକୁ ନକଲ କରନ୍ତୁ" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2091,7 +2091,7 @@ + #: ../gtk/gtkmountoperation.c:618 + #| msgid "Connect _anonymously" + msgid "_Anonymous" +-msgstr "ଅଜ୍ଞାତ (_A)" ++msgstr "ଅଜ୍ଞାତ" + + #: ../gtk/gtkmountoperation.c:627 + msgid "Registered U_ser" +@@ -2100,17 +2100,17 @@ + #: ../gtk/gtkmountoperation.c:638 + #| msgid "_Username:" + msgid "_Username" +-msgstr "ବ୍ୟବହାରକାରୀ ନାମ (_U)" ++msgstr "ବ୍ୟବହାରକାରୀ ନାମ" + + #: ../gtk/gtkmountoperation.c:643 + #| msgid "_Domain:" + msgid "_Domain" +-msgstr "ଡମେନ (_D)" ++msgstr "ଡମେନ" + + #: ../gtk/gtkmountoperation.c:649 + #| msgid "_Password:" + msgid "_Password" +-msgstr "ପ୍ରବେଶ ସଂଙ୍କେତ (_P)" ++msgstr "ପ୍ରବେଶ ସଂଙ୍କେତ" + + #: ../gtk/gtkmountoperation.c:671 + msgid "Forget password _immediately" +@@ -2135,7 +2135,7 @@ + + #: ../gtk/gtkmountoperation.c:1300 + msgid "_End Process" +-msgstr "ପ୍ରଣାଳୀକୁ ଶେଷକରନ୍ତୁ (_E)" ++msgstr "ପ୍ରଣାଳୀକୁ ଶେଷକରନ୍ତୁ" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2219,15 +2219,15 @@ + + #: ../gtk/gtkpagesetupunixdialog.c:896 + msgid "_Format for:" +-msgstr "ଏହା ପାଇଁ ସଂରୂପଣ କରନ୍ତୁ (_F):" ++msgstr "ଏହା ପାଇଁ ସଂରୂପଣ କରନ୍ତୁ:" + + #: ../gtk/gtkpagesetupunixdialog.c:917 ../gtk/gtkprintunixdialog.c:3477 + msgid "_Paper size:" +-msgstr "କାଗଜର ଆକାର (_P):" ++msgstr "କାଗଜର ଆକାର:" + + #: ../gtk/gtkpagesetupunixdialog.c:946 + msgid "_Orientation:" +-msgstr "ଅନୁସ୍ଥାପନ (_O):" ++msgstr "ଅନୁସ୍ଥାପନ:" + + #: ../gtk/gtkpagesetupunixdialog.c:1006 ../gtk/gtkprintunixdialog.c:3531 + msgid "Page Setup" +@@ -2422,7 +2422,7 @@ + + #: ../gtk/gtkprintunixdialog.c:2235 + msgid "_All Pages" +-msgstr "ସମସ୍ତ ପୃଷ୍ଠାଗୁଡ଼ିକ (_A)" ++msgstr "ସମସ୍ତ ପୃଷ୍ଠାଗୁଡ଼ିକ" + + #: ../gtk/gtkprintunixdialog.c:2240 + msgid "C_urrent Page" +@@ -2430,7 +2430,7 @@ + + #: ../gtk/gtkprintunixdialog.c:2248 + msgid "Se_lection" +-msgstr "ଚୟନ (_S)" ++msgstr "ଚୟନ" + + #: ../gtk/gtkprintunixdialog.c:2254 + msgid "Pag_es:" +@@ -2463,7 +2463,7 @@ + + #: ../gtk/gtkprintunixdialog.c:2302 + msgid "_Reverse" +-msgstr "ପ୍ରତ୍ଯାବୃତ କରନ୍ତୁ (_R)" ++msgstr "ପ୍ରତ୍ଯାବୃତ କରନ୍ତୁ" + + #: ../gtk/gtkprintunixdialog.c:2318 + msgid "General" +@@ -2557,7 +2557,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3395 + msgid "_Only print:" +-msgstr "କେବଳ ମୁଦ୍ରଣ କରନ୍ତୁ (_O):" ++msgstr "କେବଳ ମୁଦ୍ରଣ କରନ୍ତୁ:" + + #. In enum order + #: ../gtk/gtkprintunixdialog.c:3407 +@@ -2594,7 +2594,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3497 + msgid "Or_ientation:" +-msgstr "ଅନୁସ୍ଥାପନ (_O):" ++msgstr "ଅନୁସ୍ଥାପନ:" + + #. In enum order + #: ../gtk/gtkprintunixdialog.c:3509 +@@ -2623,7 +2623,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3572 + msgid "_Billing info:" +-msgstr "ବିଲି ସମ୍ବନ୍ଧୀୟ ସୂଚନା (_B):" ++msgstr "ବିଲି ସମ୍ବନ୍ଧୀୟ ସୂଚନା:" + + #: ../gtk/gtkprintunixdialog.c:3587 + msgid "Print Document" +@@ -2634,7 +2634,7 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3594 + msgid "_Now" +-msgstr "ବର୍ତମାନ (_N)" ++msgstr "ବର୍ତମାନ" + + #: ../gtk/gtkprintunixdialog.c:3603 + msgid "A_t:" +@@ -2680,7 +2680,7 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3672 + msgid "_After:" +-msgstr "ଏହା ପରେ (_A):" ++msgstr "ଏହା ପରେ:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -2740,19 +2740,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1774 + msgid "Copy _Location" +-msgstr "ଅବସ୍ଥାନକୁ ନକଲ କରନ୍ତୁ (_L)" ++msgstr "ଅବସ୍ଥାନକୁ ନକଲ କରନ୍ତୁ" + + #: ../gtk/gtkrecentchooserdefault.c:1787 + msgid "_Remove From List" +-msgstr "ତାଲିକାରୁ ବାହାର କରି ଦିଅନ୍ତୁ (_R)" ++msgstr "ତାଲିକାରୁ ବାହାର କରି ଦିଅନ୍ତୁ" + + #: ../gtk/gtkrecentchooserdefault.c:1796 + msgid "_Clear List" +-msgstr "ତାଲିକାକୁ ସଫା କରନ୍ତୁ (_C)" ++msgstr "ତାଲିକାକୁ ସଫା କରନ୍ତୁ" + + #: ../gtk/gtkrecentchooserdefault.c:1810 + msgid "Show _Private Resources" +-msgstr "ବ୍ଯକ୍ତିଗତ ସମ୍ବଳ ଗୁଡିକୁ ଦେଖାନ୍ତୁ (_P)" ++msgstr "ବ୍ଯକ୍ତିଗତ ସମ୍ବଳ ଗୁଡିକୁ ଦେଖାନ୍ତୁ" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -2842,42 +2842,42 @@ + #: ../gtk/gtkstock.c:332 + msgctxt "Stock label" + msgid "_About" +-msgstr "ବିବରଣୀ (_A)" ++msgstr "ବିବରଣୀ" + + #: ../gtk/gtkstock.c:333 + msgctxt "Stock label" + msgid "_Add" +-msgstr "ଯୋଗ କରନ୍ତୁ (_A)" ++msgstr "ଯୋଗ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:334 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "ପ୍ରୟୋଗ କରନ୍ତୁ (_A)" ++msgstr "ପ୍ରୟୋଗ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:335 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "ମୋଟା ଅକ୍ଷର (_B)" ++msgstr "ମୋଟା ଅକ୍ଷର" + + #: ../gtk/gtkstock.c:336 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ବାତିଲ କରନ୍ତୁ (_C)" ++msgstr "ବାତିଲ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:337 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "CD-ROM (_C)" ++msgstr "CD-ROM" + + #: ../gtk/gtkstock.c:338 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "ସଫା କରନ୍ତୁ (_C)" ++msgstr "ସଫା କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:339 + msgctxt "Stock label" + msgid "_Close" +-msgstr "ବନ୍ଦ କରନ୍ତୁ (_C)" ++msgstr "ବନ୍ଦ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:340 + msgctxt "Stock label" +@@ -2887,12 +2887,12 @@ + #: ../gtk/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "ରୂପାନ୍ତରିତ କରନ୍ତୁ (_C)" ++msgstr "ରୂପାନ୍ତରିତ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "ନକଲ କରନ୍ତୁ (_C)" ++msgstr "ନକଲ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:343 + msgctxt "Stock label" +@@ -2902,120 +2902,120 @@ + #: ../gtk/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "ଲିଭାନ୍ତୁ (_D)" ++msgstr "ଲିଭାନ୍ତୁ" + + #: ../gtk/gtkstock.c:345 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "ପରିତ୍ୟାଗ କରନ୍ତୁ (_D)" ++msgstr "ପରିତ୍ୟାଗ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ (_D)" ++msgstr "ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ନିଷ୍ପାଦନ କରନ୍ତୁ (_E)" ++msgstr "ନିଷ୍ପାଦନ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "ସମ୍ପାଦନ କରନ୍ତୁ (_E)" ++msgstr "ସମ୍ପାଦନ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:349 + msgctxt "Stock label" + msgid "_File" +-msgstr "ଫାଇଲ (_F)" ++msgstr "ଫାଇଲ" + + #: ../gtk/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Find" +-msgstr "ଖୋଜନ୍ତୁ (_F)" ++msgstr "ଖୋଜନ୍ତୁ" + + #: ../gtk/gtkstock.c:351 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ଖୋଜି ବଦଳାନ୍ତୁ (_R)" ++msgstr "ଖୋଜି ବଦଳାନ୍ତୁ" + + #: ../gtk/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ଫ୍ଲପି (_F)" ++msgstr "ଫ୍ଲପି" + + #: ../gtk/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "ପୂର୍ଣ୍ଣ ପରଦା (_F)" ++msgstr "ପୂର୍ଣ୍ଣ ପରଦା" + + #: ../gtk/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "ପୂର୍ଣ୍ଣ ପରଦା ଧାରା ଛାଡ଼ନ୍ତୁ (_L)" ++msgstr "ପୂର୍ଣ୍ଣ ପରଦା ଧାରା ଛାଡ଼ନ୍ତୁ" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/gtkstock.c:356 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "ତଳ (_B)" ++msgstr "ତଳ" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/gtkstock.c:358 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "ପ୍ରଥମ (_F)" ++msgstr "ପ୍ରଥମ" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/gtkstock.c:360 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "ଅନ୍ତିମ (_L)" ++msgstr "ଅନ୍ତିମ" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/gtkstock.c:362 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ଉପର (_T)" ++msgstr "ଉପର" + + #. This is a navigation label as in "go back" + #: ../gtk/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "ପଛ (_B)" ++msgstr "ପଛ" + + #. This is a navigation label as in "go down" + #: ../gtk/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "ତଳ (_D)" ++msgstr "ତଳ" + + #. This is a navigation label as in "go forward" + #: ../gtk/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ଆଗକୁ (_F)" ++msgstr "ଆଗକୁ" + + #. This is a navigation label as in "go up" + #: ../gtk/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ଉପର (_U)" ++msgstr "ଉପର" + + #: ../gtk/gtkstock.c:371 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "ହାର୍ଡ଼ ଡିସ୍କ (_H)" ++msgstr "ହାର୍ଡ଼ ଡିସ୍କ" + + #: ../gtk/gtkstock.c:372 + msgctxt "Stock label" + msgid "_Help" +-msgstr "ସହାୟତା (_H)" ++msgstr "ସହାୟତା" + + #: ../gtk/gtkstock.c:373 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ଘର (_H)" ++msgstr "ଘର" + + #: ../gtk/gtkstock.c:374 + msgctxt "Stock label" +@@ -3030,58 +3030,58 @@ + #: ../gtk/gtkstock.c:376 + msgctxt "Stock label" + msgid "_Index" +-msgstr "ଅନୁକ୍ରମଣିକା (_I)" ++msgstr "ଅନୁକ୍ରମଣିକା" + + #: ../gtk/gtkstock.c:377 + msgctxt "Stock label" + msgid "_Information" +-msgstr "ସୂଚନା (_I)" ++msgstr "ସୂଚନା" + + #: ../gtk/gtkstock.c:378 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ତେରେଛା (_I)" ++msgstr "ତେରେଛା" + + #: ../gtk/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ଏଠାକୁ ଯାଆନ୍ତୁ (_J)" ++msgstr "ଏଠାକୁ ଯାଆନ୍ତୁ" + + #. This is about text justification, "centered text" + #: ../gtk/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Center" +-msgstr "କେନ୍ଦ୍ର (_C)" ++msgstr "କେନ୍ଦ୍ର" + + #. This is about text justification + #: ../gtk/gtkstock.c:383 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ପୁରଣ କରନ୍ତୁ (_F)" ++msgstr "ପୁରଣ କରନ୍ତୁ" + + #. This is about text justification, "left-justified text" + #: ../gtk/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Left" +-msgstr "ବାମ (_L):" ++msgstr "ବାମ:" + + #. This is about text justification, "right-justified text" + #: ../gtk/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Right" +-msgstr "ଡାହାଣ (_R):" ++msgstr "ଡାହାଣ:" + + #. Media label, as in "fast forward" + #: ../gtk/gtkstock.c:390 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ଆଗକୁ (_F)" ++msgstr "ଆଗକୁ" + + #. Media label, as in "next song" + #: ../gtk/gtkstock.c:392 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "ନୂତନ (_N)" ++msgstr "ନୂତନ" + + #. Media label, as in "pause music" + #: ../gtk/gtkstock.c:394 +@@ -3093,7 +3093,7 @@ + #: ../gtk/gtkstock.c:396 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "ସ୍ଥାନ (_P)" ++msgstr "ସ୍ଥାନ" + + #. Media label, as in "previous song" + #: ../gtk/gtkstock.c:398 +@@ -3105,7 +3105,7 @@ + #: ../gtk/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "ଲିପିବଦ୍ଧ କରନ୍ତୁ (_R)" ++msgstr "ଲିପିବଦ୍ଧ କରନ୍ତୁ" + + #. Media label + #: ../gtk/gtkstock.c:402 +@@ -3117,32 +3117,32 @@ + #: ../gtk/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "ବିରାମ କରନ୍ତୁ (_S)" ++msgstr "ବିରାମ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:405 + msgctxt "Stock label" + msgid "_Network" +-msgstr "ନେଟୱାର୍କ (_N)" ++msgstr "ନେଟୱାର୍କ" + + #: ../gtk/gtkstock.c:406 + msgctxt "Stock label" + msgid "_New" +-msgstr "ନୂତନ (_N)" ++msgstr "ନୂତନ" + + #: ../gtk/gtkstock.c:407 + msgctxt "Stock label" + msgid "_No" +-msgstr "ନାଁ (_N)" ++msgstr "ନାଁ" + + #: ../gtk/gtkstock.c:408 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ଠିକ ଅଛି (_O)" ++msgstr "ଠିକ ଅଛି" + + #: ../gtk/gtkstock.c:409 + msgctxt "Stock label" + msgid "_Open" +-msgstr "ଖୋଲନ୍ତୁ (_O)" ++msgstr "ଖୋଲନ୍ତୁ" + + #. Page orientation + #: ../gtk/gtkstock.c:411 +@@ -3176,17 +3176,17 @@ + #: ../gtk/gtkstock.c:419 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "ଲଗାନ୍ତୁ (_P)" ++msgstr "ଲଗାନ୍ତୁ" + + #: ../gtk/gtkstock.c:420 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "ପସନ୍ଦ (_P)" ++msgstr "ପସନ୍ଦ" + + #: ../gtk/gtkstock.c:421 + msgctxt "Stock label" + msgid "_Print" +-msgstr "ମୁଦ୍ରଣ କରନ୍ତୁ (_P)" ++msgstr "ମୁଦ୍ରଣ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:422 + msgctxt "Stock label" +@@ -3196,128 +3196,128 @@ + #: ../gtk/gtkstock.c:423 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "ଗୁଣଧର୍ମ (_P)" ++msgstr "ଗୁଣଧର୍ମ" + + #: ../gtk/gtkstock.c:424 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "ବିଦାୟ ନିଅନ୍ତୁ (_Q)" ++msgstr "ବିଦାୟ ନିଅନ୍ତୁ" + + #: ../gtk/gtkstock.c:425 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "ପୁଣି କରନ୍ତୁ (_R)" ++msgstr "ପୁଣି କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:426 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ସତେଜିତ କରନ୍ତୁ (_R)" ++msgstr "ସତେଜିତ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "କାଢ଼ନ୍ତୁ (_R)" ++msgstr "କାଢ଼ନ୍ତୁ" + + #: ../gtk/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "ପ୍ରତ୍ଯାବୃତ କରନ୍ତୁ (_R)" ++msgstr "ପ୍ରତ୍ଯାବୃତ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Save" +-msgstr "ସଂରକ୍ଷଣ କରନ୍ତୁ (_S)" ++msgstr "ସଂରକ୍ଷଣ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:430 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "ଏହି ଭାବେ ସଂରକ୍ଷଣ କରନ୍ତୁ (_A)" ++msgstr "ଏହି ଭାବେ ସଂରକ୍ଷଣ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:431 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "ସବୁ ବାଛନ୍ତୁ (_A)" ++msgstr "ସବୁ ବାଛନ୍ତୁ" + + #: ../gtk/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Color" +-msgstr "ରଙ୍ଗ (_C)" ++msgstr "ରଙ୍ଗ" + + #: ../gtk/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ଅକ୍ଷରରୂପ (_F)" ++msgstr "ଅକ୍ଷରରୂପ" + + #. Sorting direction + #: ../gtk/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ଆରୋହୀ କ୍ରମ (_A)" ++msgstr "ଆରୋହୀ କ୍ରମ" + + #. Sorting direction + #: ../gtk/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "ଅବରୋହୀ କ୍ରମ (_D)" ++msgstr "ଅବରୋହୀ କ୍ରମ" + + #: ../gtk/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "ବନାନ ଶୋଧନ କରନ୍ତୁ (_S)" ++msgstr "ବନାନ ଶୋଧନ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:439 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "ବିରାମ କରନ୍ତୁ (_S)" ++msgstr "ବିରାମ କରନ୍ତୁ" + + #. Font variant + #: ../gtk/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "ମଧ୍ଯରେଖିତ କରନ୍ତୁ (_S)" ++msgstr "ମଧ୍ଯରେଖିତ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "ପୁନରୁଦ୍ଧାର କରନ୍ତୁ (_U)" ++msgstr "ପୁନରୁଦ୍ଧାର କରନ୍ତୁ" + + #. Font variant + #: ../gtk/gtkstock.c:444 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "ଅବରେଖନ କରନ୍ତୁ (_U)" ++msgstr "ଅବରେଖନ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "ପଦକ୍ଷେପ ବାତିଲ କରନ୍ତୁ (_U)" ++msgstr "ପଦକ୍ଷେପ ବାତିଲ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ହଁ (_Y)" ++msgstr "ହଁ" + + #. Zoom + #: ../gtk/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "ସାଧାରଣ ଆକାର (_N)" ++msgstr "ସାଧାରଣ ଆକାର" + + #. Zoom + #: ../gtk/gtkstock.c:450 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "ସର୍ବୋତ୍ତମ ଭାବରେ ମେଳ (_F)" ++msgstr "ସର୍ବୋତ୍ତମ ଭାବରେ ମେଳ" + + #: ../gtk/gtkstock.c:451 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "ବଡ଼ କରନ୍ତୁ (_I)" ++msgstr "ବଡ଼ କରନ୍ତୁ" + + #: ../gtk/gtkstock.c:452 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ସାନ କରନ୍ତୁ (_O)" ++msgstr "ସାନ କରନ୍ତୁ" + + #. Translators: if the "on" state label requires more than three + #. * glyphs then use MEDIUM VERTICAL BAR (U+2759) as the text for +@@ -3455,11 +3455,11 @@ + + #: ../gtk/gtktextutil.c:58 + msgid "LRM _Left-to-right mark" +-msgstr "LRM ବାମରୁ ଡାହାଣ ଚିହ୍ନ (_L)" ++msgstr "LRM ବାମରୁ ଡାହାଣ ଚିହ୍ନ" + + #: ../gtk/gtktextutil.c:59 + msgid "RLM _Right-to-left mark" +-msgstr "ଆର.ଏଲ.ଏମ. ଡାହାଣରୁ ବାମ ଚିହ୍ନ (_R)" ++msgstr "ଆର.ଏଲ.ଏମ. ଡାହାଣରୁ ବାମ ଚିହ୍ନ" + + #: ../gtk/gtktextutil.c:60 + msgid "LRE Left-to-right _embedding" +@@ -3479,11 +3479,11 @@ + + #: ../gtk/gtktextutil.c:64 + msgid "PDF _Pop directional formatting" +-msgstr "ପି.ଡି.ଏଫ. ପପ ଦିଗରେ ସଜ୍ଜିକରଣ (_P)" ++msgstr "ପି.ଡି.ଏଫ. ପପ ଦିଗରେ ସଜ୍ଜିକରଣ" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWS _Zero width space" +-msgstr "ଜେଡ.ଡବ୍ଲୁ.ଏସ. ଶୂନ୍ଯ ଓସାର ଖାଲି ସ୍ଥାନ (_Z)" ++msgstr "ଜେଡ.ଡବ୍ଲୁ.ଏସ. ଶୂନ୍ଯ ଓସାର ଖାଲି ସ୍ଥାନ" + + #: ../gtk/gtktextutil.c:66 + msgid "ZWJ Zero width _joiner" +@@ -4913,7 +4913,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:521 + msgid "Print to File" +-msgstr "ଫାଇଲରେ ମୁଦ୍ରଣ କରନ୍ତୁ (_P)" ++msgstr "ଫାଇଲରେ ମୁଦ୍ରଣ କରନ୍ତୁ" + + #: ../modules/printbackends/file/gtkprintbackendfile.c:647 + msgid "PDF" +@@ -4938,7 +4938,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:729 + msgid "_Output format" +-msgstr "ନିର୍ଗମ ଶୈଳୀ (_O)" ++msgstr "ନିର୍ଗମ ଶୈଳୀ" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5013,7 +5013,7 @@ + #~ msgstr "ଗୋଟିଏ ଫୋଲଡର ବାଛନ୍ତୁ" + + #~ msgid "_Save in folder:" +-#~ msgstr "ଫୋଲ୍ଡରରେ ସଂରକ୍ଷିତ କରନ୍ତୁ (_S):" ++#~ msgstr "ଫୋଲ୍ଡରରେ ସଂରକ୍ଷିତ କରନ୍ତୁ:" + + #~ msgid "X screen to use" + #~ msgstr "ବ୍ଯବହାର ପାଇଁ X ପରଦା" +@@ -5038,13 +5038,13 @@ + #~ msgstr "Caps Lock ଅନ ଅଛି" + + #~ msgid "_Add" +-#~ msgstr "ଯୋଗ କରନ୍ତୁ (_A)" ++#~ msgstr "ଯୋଗ କରନ୍ତୁ" + + #~ msgid "_Remove" +-#~ msgstr "କାଢ଼ନ୍ତୁ (_R)" ++#~ msgstr "କାଢ଼ନ୍ତୁ" + + #~ msgid "_Browse for other folders" +-#~ msgstr "ଅନ୍ଯ ଫୋଲ୍ଡର ପାଇଁ ଖୋଜିବୁଲନ୍ତୁ (_B)" ++#~ msgstr "ଅନ୍ଯ ଫୋଲ୍ଡର ପାଇଁ ଖୋଜିବୁଲନ୍ତୁ" + + #~ msgid "Invalid path" + #~ msgstr "ଅବୈଧ ପଥ" +@@ -5761,13 +5761,13 @@ + #~ "ଆପଣ ନିଶ୍ଚିତ ଭାବରେ ତାହାକୁ ବାଛିବାକୁ ଚାହାନ୍ତି କି?" + + #~ msgid "_New Folder" +-#~ msgstr "ନୂତନ ଫୋଲ୍ଡର (_N)" ++#~ msgstr "ନୂତନ ଫୋଲ୍ଡର" + + #~ msgid "De_lete File" + #~ msgstr "ଫାଇଲ ଲିଭାନ୍ତୁ (_l)" + + #~ msgid "_Rename File" +-#~ msgstr "ଫାଇଲର ନାମ ବଦଳାନ୍ତୁ (_R)" ++#~ msgstr "ଫାଇଲର ନାମ ବଦଳାନ୍ତୁ" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -5777,7 +5777,7 @@ + #~ msgstr "ନୂତନ ଫୋଲ୍ଡର" + + #~ msgid "_Folder name:" +-#~ msgstr "ଫୋଲ୍ଡର ନାମ (_F)" ++#~ msgstr "ଫୋଲ୍ଡର ନାମ" + + #~ msgid "" + #~ "The filename \"%s\" contains symbols that are not allowed in filenames" +@@ -5827,7 +5827,7 @@ + #~ msgstr "ଗାମା" + + #~ msgid "_Gamma value" +-#~ msgstr "ଗାମା ମୂଲ୍ଯ (_G)" ++#~ msgstr "ଗାମା ମୂଲ୍ଯ" + + #~ msgid "Input" + #~ msgstr "ନିବେଶ" +@@ -5836,7 +5836,7 @@ + #~ msgstr "କୌଣସି ବିସ୍ତୃତ ନିବେଶ ଯନ୍ତ୍ର ନାହିଁ" + + #~ msgid "_Device:" +-#~ msgstr "ଯନ୍ତ୍ର (_D):" ++#~ msgstr "ଯନ୍ତ୍ର:" + + #~ msgid "Disabled" + #~ msgstr "ନିଷ୍କ୍ରିୟ" +@@ -5848,7 +5848,7 @@ + #~ msgstr "ୱିଣ୍ଡୋ" + + #~ msgid "_Mode:" +-#~ msgstr "ଧାରା (_M):" ++#~ msgstr "ଧାରା:" + + #~ msgid "Axes" + #~ msgstr "ଏକ୍ସେସ୍" +@@ -5869,7 +5869,7 @@ + #~ msgstr "ୱାଇ ଢାଲୁ (_i):" + + #~ msgid "_Wheel:" +-#~ msgstr "ଚକ (_W):" ++#~ msgstr "ଚକ:" + + #~ msgid "none" + #~ msgstr "କିଛି ନୁହେଁ" +diff -urN a/po/pa.po b/po/pa.po +--- a/po/pa.po 2025-06-09 20:05:32.427563786 -0700 ++++ b/po/pa.po 2025-06-09 20:11:49.176742274 -0700 +@@ -126,7 +126,7 @@ + #: gdk/keyname-table.h:6847 + msgctxt "keyboard label" + msgid "Scroll_Lock" +-msgstr "ਸਕਰੋਲ ਤਾਲਾ(_L)" ++msgstr "ਸਕਰੋਲ ਤਾਲਾ" + + #: gdk/keyname-table.h:6848 + msgctxt "keyboard label" +@@ -171,12 +171,12 @@ + #: gdk/keyname-table.h:6856 gtk/gtkshortcutlabel.c:222 + msgctxt "keyboard label" + msgid "Page_Up" +-msgstr "ਸਫ਼ਾ ਥੱਲੇ(_U)" ++msgstr "ਸਫ਼ਾ ਥੱਲੇ" + + #: gdk/keyname-table.h:6857 gtk/gtkshortcutlabel.c:225 + msgctxt "keyboard label" + msgid "Page_Down" +-msgstr "ਸਫ਼ਾ ਹੇਠਾਂ(_D)" ++msgstr "ਸਫ਼ਾ ਹੇਠਾਂ" + + #: gdk/keyname-table.h:6858 + msgctxt "keyboard label" +@@ -201,7 +201,7 @@ + #: gdk/keyname-table.h:6862 + msgctxt "keyboard label" + msgid "Num_Lock" +-msgstr "ਨਮ ਤਾਲਾ(_L)" ++msgstr "ਨਮ ਤਾਲਾ" + + #. Translators: KP_ means “key pad” here + #: gdk/keyname-table.h:6864 +@@ -659,17 +659,17 @@ + #: gtk/a11y/gtkimageaccessible.c:53 gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_About" +-msgstr "ਇਸ ਬਾਰੇ(_A)" ++msgstr "ਇਸ ਬਾਰੇ" + + #: gtk/a11y/gtkimageaccessible.c:54 gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Add" +-msgstr "ਸ਼ਾਮਲ(_A)" ++msgstr "ਸ਼ਾਮਲ" + + #: gtk/a11y/gtkimageaccessible.c:55 gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "ਗੂੜ੍ਹਾ(_B)" ++msgstr "ਗੂੜ੍ਹਾ" + + #: gtk/a11y/gtkimageaccessible.c:56 gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" +@@ -679,12 +679,12 @@ + #: gtk/a11y/gtkimageaccessible.c:57 gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "ਸਾਫ਼ ਕਰੋ(_C)" ++msgstr "ਸਾਫ਼ ਕਰੋ" + + #: gtk/a11y/gtkimageaccessible.c:58 gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Close" +-msgstr "ਬੰਦ ਕਰੋ(_C)" ++msgstr "ਬੰਦ ਕਰੋ" + + #: gtk/a11y/gtkimageaccessible.c:59 gtk/gtkheaderbar.c:415 gtk/gtkwindow.c:9307 + msgid "Minimize" +@@ -701,7 +701,7 @@ + #: gtk/a11y/gtkimageaccessible.c:62 gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "ਕਾਪੀ ਕਰੋ(_C)" ++msgstr "ਕਾਪੀ ਕਰੋ" + + #: gtk/a11y/gtkimageaccessible.c:63 gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" +@@ -711,7 +711,7 @@ + #: gtk/a11y/gtkimageaccessible.c:64 gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "ਹਟਾਓ(_D)" ++msgstr "ਹਟਾਓ" + + #: gtk/a11y/gtkimageaccessible.c:65 gtk/deprecated/gtkstock.c:339 + msgctxt "Stock label" +@@ -737,95 +737,95 @@ + #: gtk/a11y/gtkimageaccessible.c:69 gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ਚਲਾਓ(_E)" ++msgstr "ਚਲਾਓ" + + #: gtk/a11y/gtkimageaccessible.c:70 gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_File" +-msgstr "ਫਾਇਲ(_F)" ++msgstr "ਫਾਇਲ" + + #: gtk/a11y/gtkimageaccessible.c:71 gtk/deprecated/gtkstock.c:363 + msgctxt "Stock label" + msgid "_Find" +-msgstr "ਖੋਜ(_F)" ++msgstr "ਖੋਜ" + + #: gtk/a11y/gtkimageaccessible.c:72 gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ਖੋਜੋ ਅਤੇ ਬਦਲੋ(_R)" ++msgstr "ਖੋਜੋ ਅਤੇ ਬਦਲੋ" + + #: gtk/a11y/gtkimageaccessible.c:73 gtk/deprecated/gtkstock.c:365 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ਫਲਾਪੀ(_F)" ++msgstr "ਫਲਾਪੀ" + + #: gtk/a11y/gtkimageaccessible.c:74 gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "ਪੂਰੀ ਸਕਰੀਨ(_F)" ++msgstr "ਪੂਰੀ ਸਕਰੀਨ" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/a11y/gtkimageaccessible.c:75 gtk/deprecated/gtkstock.c:369 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "ਹੇਠਾਂ(_B):" ++msgstr "ਹੇਠਾਂ:" + + #. This is a navigation label as in "go to the first page" + #: gtk/a11y/gtkimageaccessible.c:76 gtk/deprecated/gtkstock.c:371 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "ਪਹਿਲਾਂ(_F)" ++msgstr "ਪਹਿਲਾਂ" + + #. This is a navigation label as in "go to the last page" + #: gtk/a11y/gtkimageaccessible.c:77 gtk/deprecated/gtkstock.c:373 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "ਆਖਰੀ(_L)" ++msgstr "ਆਖਰੀ" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/a11y/gtkimageaccessible.c:78 gtk/deprecated/gtkstock.c:375 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ਉੱਤੇ(_T)" ++msgstr "ਉੱਤੇ" + + #. This is a navigation label as in "go back" + #: gtk/a11y/gtkimageaccessible.c:79 gtk/deprecated/gtkstock.c:377 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "ਪਿੱਛੇ(_B)" ++msgstr "ਪਿੱਛੇ" + + #. This is a navigation label as in "go down" + #: gtk/a11y/gtkimageaccessible.c:80 gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "ਹੇਠਾਂ(_D)" ++msgstr "ਹੇਠਾਂ" + + #. This is a navigation label as in "go forward" + #: gtk/a11y/gtkimageaccessible.c:81 gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ਅੱਗੇ(_F)" ++msgstr "ਅੱਗੇ" + + #. This is a navigation label as in "go up" + #: gtk/a11y/gtkimageaccessible.c:82 gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ਉੱਤੇ(_U)" ++msgstr "ਉੱਤੇ" + + #: gtk/a11y/gtkimageaccessible.c:83 gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "ਹਾਰਡ ਡਿਸਕ(_H)" ++msgstr "ਹਾਰਡ ਡਿਸਕ" + + #: gtk/a11y/gtkimageaccessible.c:84 gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Help" +-msgstr "ਮੱਦਦ(_H)" ++msgstr "ਮੱਦਦ" + + #: gtk/a11y/gtkimageaccessible.c:85 gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ਘਰ(_H)" ++msgstr "ਘਰ" + + #: gtk/a11y/gtkimageaccessible.c:86 gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" +@@ -835,53 +835,53 @@ + #: gtk/a11y/gtkimageaccessible.c:87 gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ਤਿਰਛਾ(_I)" ++msgstr "ਤਿਰਛਾ" + + #: gtk/a11y/gtkimageaccessible.c:88 gtk/deprecated/gtkstock.c:392 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ਜੰਪ(_J)" ++msgstr "ਜੰਪ" + + #. This is about text justification, "centered text" + #: gtk/a11y/gtkimageaccessible.c:89 gtk/deprecated/gtkstock.c:394 + msgctxt "Stock label" + msgid "_Center" +-msgstr "ਬਦਲੋ(_C)" ++msgstr "ਬਦਲੋ" + + #. This is about text justification + #: gtk/a11y/gtkimageaccessible.c:90 gtk/deprecated/gtkstock.c:396 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ਫਾਇਲਾਂ(_F)" ++msgstr "ਫਾਇਲਾਂ" + + #. This is about text justification, "left-justified text" + #: gtk/a11y/gtkimageaccessible.c:91 gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label" + msgid "_Left" +-msgstr "ਖੱਬੇ(_L)" ++msgstr "ਖੱਬੇ" + + #. This is about text justification, "right-justified text" + #: gtk/a11y/gtkimageaccessible.c:92 gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label" + msgid "_Right" +-msgstr "ਸੱਜੇ(_R)" ++msgstr "ਸੱਜੇ" + + #: gtk/a11y/gtkimageaccessible.c:93 gtk/deprecated/gtkstock.c:367 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "ਪੂਰੀ ਸਕਰੀਨ ਛੱਡੋ(_L)" ++msgstr "ਪੂਰੀ ਸਕਰੀਨ ਛੱਡੋ" + + #. Media label, as in "fast forward" + #: gtk/a11y/gtkimageaccessible.c:94 gtk/deprecated/gtkstock.c:403 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ਅੱਗੇ(_F)" ++msgstr "ਅੱਗੇ" + + #. Media label, as in "next song" + #: gtk/a11y/gtkimageaccessible.c:95 gtk/deprecated/gtkstock.c:405 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "ਨਵਾਂ(_N)" ++msgstr "ਨਵਾਂ" + + #. Media label, as in "pause music" + #: gtk/a11y/gtkimageaccessible.c:96 gtk/deprecated/gtkstock.c:407 +@@ -893,7 +893,7 @@ + #: gtk/a11y/gtkimageaccessible.c:97 gtk/deprecated/gtkstock.c:409 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "ਚਲਾਓ(_P)" ++msgstr "ਚਲਾਓ" + + #. Media label, as in "previous song" + #: gtk/a11y/gtkimageaccessible.c:98 gtk/deprecated/gtkstock.c:411 +@@ -905,7 +905,7 @@ + #: gtk/a11y/gtkimageaccessible.c:99 gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "ਰਿਕਾਰਡ(_R)" ++msgstr "ਰਿਕਾਰਡ" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:100 gtk/deprecated/gtkstock.c:415 +@@ -917,32 +917,32 @@ + #: gtk/a11y/gtkimageaccessible.c:101 gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "ਰੋਕੋ(_S)" ++msgstr "ਰੋਕੋ" + + #: gtk/a11y/gtkimageaccessible.c:102 gtk/deprecated/gtkstock.c:418 + msgctxt "Stock label" + msgid "_Network" +-msgstr "ਨੈੱਟਵਰਕ(_N)" ++msgstr "ਨੈੱਟਵਰਕ" + + #: gtk/a11y/gtkimageaccessible.c:103 gtk/deprecated/gtkstock.c:419 + msgctxt "Stock label" + msgid "_New" +-msgstr "ਨਵਾਂ(_N)" ++msgstr "ਨਵਾਂ" + + #: gtk/a11y/gtkimageaccessible.c:104 gtk/deprecated/gtkstock.c:422 + msgctxt "Stock label" + msgid "_Open" +-msgstr "ਖੋਲ੍ਹੋ(_O)" ++msgstr "ਖੋਲ੍ਹੋ" + + #: gtk/a11y/gtkimageaccessible.c:105 gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "ਚੇਪੋ(_P)" ++msgstr "ਚੇਪੋ" + + #: gtk/a11y/gtkimageaccessible.c:106 gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Print" +-msgstr "ਛਾਪੋ(_P)" ++msgstr "ਛਾਪੋ" + + #: gtk/a11y/gtkimageaccessible.c:107 gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" +@@ -952,86 +952,86 @@ + #: gtk/a11y/gtkimageaccessible.c:108 gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "ਵਿਸ਼ੇਸ਼ਤਾ(_P)" ++msgstr "ਵਿਸ਼ੇਸ਼ਤਾ" + + #: gtk/a11y/gtkimageaccessible.c:109 gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "ਬਾਹਰ(_Q)" ++msgstr "ਬਾਹਰ" + + #: gtk/a11y/gtkimageaccessible.c:110 gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "ਮੁੜ-ਵਾਪਸ(_R)" ++msgstr "ਮੁੜ-ਵਾਪਸ" + + #: gtk/a11y/gtkimageaccessible.c:111 gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ਤਾਜ਼ਾ(_R)" ++msgstr "ਤਾਜ਼ਾ" + + #: gtk/a11y/gtkimageaccessible.c:112 gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "ਹਟਾਓ(_R)" ++msgstr "ਹਟਾਓ" + + #: gtk/a11y/gtkimageaccessible.c:113 gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "ਪਰਤਾਓ(_R)" ++msgstr "ਪਰਤਾਓ" + + #: gtk/a11y/gtkimageaccessible.c:114 gtk/deprecated/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Save" +-msgstr "ਸੰਭਾਲੋ(_S)" ++msgstr "ਸੰਭਾਲੋ" + + #: gtk/a11y/gtkimageaccessible.c:115 gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "ਇੰਜ ਸੰਭਾਲੋ(_A)" ++msgstr "ਇੰਜ ਸੰਭਾਲੋ" + + #: gtk/a11y/gtkimageaccessible.c:116 gtk/deprecated/gtkstock.c:444 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "ਸਭ ਚੁਣੋ(_A)" ++msgstr "ਸਭ ਚੁਣੋ" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:117 gtk/deprecated/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ਵਧਦਾ ਕ੍ਰਮ(_A)" ++msgstr "ਵਧਦਾ ਕ੍ਰਮ" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:118 gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "ਘੱਟਦਾ ਕ੍ਰਮ(_D)" ++msgstr "ਘੱਟਦਾ ਕ੍ਰਮ" + + #: gtk/a11y/gtkimageaccessible.c:119 gtk/deprecated/gtkstock.c:451 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "ਸ਼ਬਦ-ਜੋੜ ਚੈੱਕ(_S)" ++msgstr "ਸ਼ਬਦ-ਜੋੜ ਚੈੱਕ" + + #: gtk/a11y/gtkimageaccessible.c:120 gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "ਰੋਕੋ(_S)" ++msgstr "ਰੋਕੋ" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:121 gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "ਵਿੰਨੋ(_S)" ++msgstr "ਵਿੰਨੋ" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:122 gtk/deprecated/gtkstock.c:457 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "ਹੇਠਾਂ ਲਾਈਨ(_U)" ++msgstr "ਹੇਠਾਂ ਲਾਈਨ" + + #: gtk/a11y/gtkimageaccessible.c:123 gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "ਵਾਪਸ(_U)" ++msgstr "ਵਾਪਸ" + + #: gtk/a11y/gtkimageaccessible.c:124 gtk/deprecated/gtkstock.c:388 + msgctxt "Stock label" +@@ -1042,23 +1042,23 @@ + #: gtk/a11y/gtkimageaccessible.c:125 gtk/deprecated/gtkstock.c:461 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "ਆਮ ਅਕਾਰ(_N)" ++msgstr "ਆਮ ਅਕਾਰ" + + #. Zoom + #: gtk/a11y/gtkimageaccessible.c:126 gtk/deprecated/gtkstock.c:463 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "ਵਧੀਆ ਫਿੱਟ(_F)" ++msgstr "ਵਧੀਆ ਫਿੱਟ" + + #: gtk/a11y/gtkimageaccessible.c:127 gtk/deprecated/gtkstock.c:464 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "ਜ਼ੂਮ ਇਨ(_I)" ++msgstr "ਜ਼ੂਮ ਇਨ" + + #: gtk/a11y/gtkimageaccessible.c:128 gtk/deprecated/gtkstock.c:465 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ਜ਼ੂਮ ਆਉਟ(_O)" ++msgstr "ਜ਼ੂਮ ਆਉਟ" + + #: gtk/a11y/gtkmenubuttonaccessible.c:102 gtk/inspector/window.ui:459 + msgid "Menu" +@@ -1120,7 +1120,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "ਆਭਾ(_H):" ++msgstr "ਆਭਾ:" + + #: gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -1136,7 +1136,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "ਮੁੱਲ(_V):" ++msgstr "ਮੁੱਲ:" + + #: gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -1144,7 +1144,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "ਲਾਲ(_R):" ++msgstr "ਲਾਲ:" + + #: gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -1152,7 +1152,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "ਹਰਾ(_G):" ++msgstr "ਹਰਾ:" + + #: gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -1160,7 +1160,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "ਨੀਲਾ(_B):" ++msgstr "ਨੀਲਾ:" + + #: gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -1176,7 +1176,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:501 + msgid "Color _name:" +-msgstr "ਰੰਗ ਨਾਂ(_N):" ++msgstr "ਰੰਗ ਨਾਂ:" + + #: gtk/deprecated/gtkcolorsel.c:516 + msgid "" +@@ -1189,7 +1189,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "ਰੰਗ-ਪੱਟੀ(_P):" ++msgstr "ਰੰਗ-ਪੱਟੀ:" + + #: gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -1226,7 +1226,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:1458 + msgid "_Save color here" +-msgstr "ਰੰਗ ਇੱਥੇ ਸੰਭਾਲੋ(_S)" ++msgstr "ਰੰਗ ਇੱਥੇ ਸੰਭਾਲੋ" + + #: gtk/deprecated/gtkcolorsel.c:1664 + msgid "" +@@ -1248,17 +1248,17 @@ + #: gtk/ui/gtkappchooserdialog.ui:61 gtk/ui/gtkassistant.ui:125 + #: gtk/ui/gtkcolorchooserdialog.ui:34 gtk/ui/gtkfontchooserdialog.ui:31 + msgid "_Cancel" +-msgstr "ਰੱਦ ਕਰੋ(_C)" ++msgstr "ਰੱਦ ਕਰੋ" + + #: gtk/deprecated/gtkcolorseldialog.c:195 gtk/gtkprinteroptionwidget.c:546 + #: gtk/ui/gtkappchooserdialog.ui:67 gtk/ui/gtkcolorchooserdialog.ui:40 + #: gtk/ui/gtkfontchooserdialog.ui:37 + msgid "_Select" +-msgstr "ਚੁਣੋ(_S)" ++msgstr "ਚੁਣੋ" + + #: gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "ਮੱਦਦ(_H)" ++msgstr "ਮੱਦਦ" + + #: gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1272,11 +1272,11 @@ + + #: gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "ਫੈਮਲੀ(_F):" ++msgstr "ਫੈਮਲੀ:" + + #: gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "ਸਟਾਇਲ(_S):" ++msgstr "ਸਟਾਇਲ:" + + #: gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1285,17 +1285,17 @@ + #. create the text entry widget + #: gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "ਝਲਕ(_P):" ++msgstr "ਝਲਕ:" + + #: gtk/deprecated/gtkfontsel.c:1693 gtk/gtkpagesetupunixdialog.c:198 + #: gtk/ui/gtkassistant.ui:50 + msgid "_Apply" +-msgstr "ਲਾਗੂ ਕਰੋ(_A)" ++msgstr "ਲਾਗੂ ਕਰੋ" + + #: gtk/deprecated/gtkfontsel.c:1698 gtk/gtkmessagedialog.c:944 + #: gtk/gtkmessagedialog.c:966 gtk/gtkprintbackend.c:780 gtk/gtkwindow.c:12783 + msgid "_OK" +-msgstr "ਠੀਕ ਹੈ(_O)" ++msgstr "ਠੀਕ ਹੈ" + + #: gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1313,12 +1313,12 @@ + #: gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "ਲਾਗੂ ਕਰੋ(_A)" ++msgstr "ਲਾਗੂ ਕਰੋ" + + #: gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ਰੱਦ ਕਰੋ(_C)" ++msgstr "ਰੱਦ ਕਰੋ" + + #: gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" +@@ -1328,42 +1328,42 @@ + #: gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "ਬਦਲੋ(_C)" ++msgstr "ਬਦਲੋ" + + #: gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "ਨਿਕਾਰੋ(_D)" ++msgstr "ਨਿਕਾਰੋ" + + #: gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "ਕੁਨੈਕਸ਼ਨ ਬੰਦ(_D)" ++msgstr "ਕੁਨੈਕਸ਼ਨ ਬੰਦ" + + #: gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "ਸੋਧ(_E)" ++msgstr "ਸੋਧ" + + #: gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Index" +-msgstr "ਇੰਡੈਕਸ(_I)" ++msgstr "ਇੰਡੈਕਸ" + + #: gtk/deprecated/gtkstock.c:390 + msgctxt "Stock label" + msgid "_Information" +-msgstr "ਜਾਣਕਾਰੀ(_I)" ++msgstr "ਜਾਣਕਾਰੀ" + + #: gtk/deprecated/gtkstock.c:420 + msgctxt "Stock label" + msgid "_No" +-msgstr "ਨਹੀਂ(_N)" ++msgstr "ਨਹੀਂ" + + #: gtk/deprecated/gtkstock.c:421 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ਠੀਕ ਹੈ(_O)" ++msgstr "ਠੀਕ ਹੈ" + + #. Page orientation + #: gtk/deprecated/gtkstock.c:424 +@@ -1397,27 +1397,27 @@ + #: gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "ਮੇਰੀ ਪਸੰਦ(_P)" ++msgstr "ਮੇਰੀ ਪਸੰਦ" + + #: gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Color" +-msgstr "ਰੰਗ(_C)" ++msgstr "ਰੰਗ" + + #: gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ਫੋਂਟ(_F)" ++msgstr "ਫੋਂਟ" + + #: gtk/deprecated/gtkstock.c:455 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "ਹਟਾਓਣਾ-ਵਾਪਸ(_U)" ++msgstr "ਹਟਾਓਣਾ-ਵਾਪਸ" + + #: gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ਹਾਂ(_Y)" ++msgstr "ਹਾਂ" + + #: gtk/deprecated/gtkuimanager.c:1782 + #, c-format +@@ -1525,12 +1525,12 @@ + + #: gtk/gtkaboutdialog.c:705 + msgid "_License" +-msgstr "ਲਾਈਸੈਂਸ(_L)" ++msgstr "ਲਾਈਸੈਂਸ" + + #: gtk/gtkaboutdialog.c:714 gtk/gtkcustompaperunixdialog.c:329 + #: gtk/gtkmessagedialog.c:948 gtk/ui/gtkassistant.ui:144 + msgid "_Close" +-msgstr "ਬੰਦ ਕਰੋ(_C)" ++msgstr "ਬੰਦ ਕਰੋ" + + #: gtk/gtkaboutdialog.c:998 + msgid "Could not show link" +@@ -2197,11 +2197,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "ਚੌੜਾਈ(_W):" ++msgstr "ਚੌੜਾਈ:" + + #: gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "ਉਚਾਈ(_H):" ++msgstr "ਉਚਾਈ:" + + #: gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2209,19 +2209,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "ਉੱਤੇ(_T):" ++msgstr "ਉੱਤੇ:" + + #: gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "ਹੇਠਾਂ(_B):" ++msgstr "ਹੇਠਾਂ:" + + #: gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "ਖੱਬੇ(_L):" ++msgstr "ਖੱਬੇ:" + + #: gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "ਸੱਜੇ(_R):" ++msgstr "ਸੱਜੇ:" + + #: gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2233,26 +2233,26 @@ + + #: gtk/gtkentry.c:9587 gtk/gtklabel.c:6681 gtk/gtktextview.c:9506 + msgid "_Copy" +-msgstr "ਕਾਪੀ ਕਰੋ(_C)" ++msgstr "ਕਾਪੀ ਕਰੋ" + + #: gtk/gtkentry.c:9591 gtk/gtklabel.c:6682 gtk/gtktextview.c:9508 + msgid "_Paste" +-msgstr "ਚੇਪੋ(_P)" ++msgstr "ਚੇਪੋ" + + #: gtk/gtkentry.c:9594 gtk/gtkfilechooserwidget.c:1481 + #: gtk/gtkfilechooserwidget.c:2290 gtk/gtklabel.c:6684 gtk/gtktextview.c:9511 + msgid "_Delete" +-msgstr "ਹਟਾਓ(_D)" ++msgstr "ਹਟਾਓ" + + #: gtk/gtkentry.c:9605 gtk/gtklabel.c:6693 gtk/gtktextview.c:9525 + msgid "Select _All" +-msgstr "ਸਭ ਚੁਣੋ(_A)" ++msgstr "ਸਭ ਚੁਣੋ" + + #: gtk/gtkentry.c:9615 gtk/gtktextview.c:9535 + #| msgctxt "keyboard label" + #| msgid "Insert" + msgid "Insert _Emoji" +-msgstr "ਈਮੋਜ਼ੀ ਪਾਓ(_E)" ++msgstr "ਈਮੋਜ਼ੀ ਪਾਓ" + + #: gtk/gtkentry.c:9791 gtk/gtktextview.c:9755 + msgid "Select all" +@@ -2298,18 +2298,18 @@ + + #: gtk/gtkfilechooserdialog.c:542 + msgid "_Name" +-msgstr "ਨਾਂ(_N)" ++msgstr "ਨਾਂ" + + #. Open item is always present + #: gtk/gtkfilechoosernative.c:545 gtk/gtkfilechoosernative.c:630 + #: gtk/gtkplacessidebar.c:3625 gtk/gtkplacessidebar.c:3693 + #: gtk/gtkplacesview.c:1682 + msgid "_Open" +-msgstr "ਖੋਲ੍ਹੋ(_O)" ++msgstr "ਖੋਲ੍ਹੋ" + + #: gtk/gtkfilechoosernative.c:630 gtk/inspector/css-editor.c:202 + msgid "_Save" +-msgstr "ਸੰਭਾਲੋ(_S)" ++msgstr "ਸੰਭਾਲੋ" + + #: gtk/gtkfilechoosernativequartz.c:332 gtk/ui/gtkfilechooserwidget.ui:392 + msgid "Select which types of files are shown" +@@ -2460,44 +2460,44 @@ + + #: gtk/gtkfilechooserwidget.c:2285 + msgid "_Visit File" +-msgstr "ਫਾਇਲ ਵੇਖੋ(_V)" ++msgstr "ਫਾਇਲ ਵੇਖੋ" + + #: gtk/gtkfilechooserwidget.c:2286 + msgid "_Open With File Manager" +-msgstr "ਫਾਇਲ ਮੈਨੇਜਰ ਨਾਲ ਖੋਲ੍ਹੋ(_O)" ++msgstr "ਫਾਇਲ ਮੈਨੇਜਰ ਨਾਲ ਖੋਲ੍ਹੋ" + + #: gtk/gtkfilechooserwidget.c:2287 + msgid "_Copy Location" +-msgstr "ਟਿਕਾਣਾ ਕਾਪੀ ਕਰੋ(_C)" ++msgstr "ਟਿਕਾਣਾ ਕਾਪੀ ਕਰੋ" + + #: gtk/gtkfilechooserwidget.c:2288 + msgid "_Add to Bookmarks" +-msgstr "ਬੁੱਕਮਾਰਕ ਸ਼ਾਮਲ(_A)" ++msgstr "ਬੁੱਕਮਾਰਕ ਸ਼ਾਮਲ" + + #: gtk/gtkfilechooserwidget.c:2289 gtk/gtkplacessidebar.c:2741 + #: gtk/ui/gtkfilechooserwidget.ui:526 + msgid "_Rename" +-msgstr "ਨਾਂ ਬਦਲੋ(_R)" ++msgstr "ਨਾਂ ਬਦਲੋ" + + #: gtk/gtkfilechooserwidget.c:2291 + msgid "_Move to Trash" +-msgstr "ਰੱਦੀ ਵਿੱਚ ਭੇਜੋ(_M)" ++msgstr "ਰੱਦੀ ਵਿੱਚ ਭੇਜੋ" + + #: gtk/gtkfilechooserwidget.c:2295 + msgid "Show _Hidden Files" +-msgstr "ਲੁਕਵੀਆਂ ਫਾਇਲਾਂ ਵੇਖੋ(_H)" ++msgstr "ਲੁਕਵੀਆਂ ਫਾਇਲਾਂ ਵੇਖੋ" + + #: gtk/gtkfilechooserwidget.c:2296 + msgid "Show _Size Column" +-msgstr "ਅਕਾਰ ਕਾਲਮ ਵੇਖੋ(_S)" ++msgstr "ਅਕਾਰ ਕਾਲਮ ਵੇਖੋ" + + #: gtk/gtkfilechooserwidget.c:2297 + msgid "Show _Time" +-msgstr "ਸਮਾਂ ਵੇਖੋ(_T)" ++msgstr "ਸਮਾਂ ਵੇਖੋ" + + #: gtk/gtkfilechooserwidget.c:2298 + msgid "Sort _Folders before Files" +-msgstr "ਫਾਇਲਾਂ ਤੋਂ ਪਹਿਲਾਂ ਫੋਲਡਰ ਲੜੀਬੱਧ(_F)" ++msgstr "ਫਾਇਲਾਂ ਤੋਂ ਪਹਿਲਾਂ ਫੋਲਡਰ ਲੜੀਬੱਧ" + + #. this is the header for the location column in the print dialog + #: gtk/gtkfilechooserwidget.c:2573 gtk/inspector/css-node-tree.ui:141 +@@ -2508,7 +2508,7 @@ + #. Label + #: gtk/gtkfilechooserwidget.c:2666 + msgid "_Name:" +-msgstr "ਨਾਂ(_N):" ++msgstr "ਨਾਂ:" + + #: gtk/gtkfilechooserwidget.c:3291 gtk/gtkfilechooserwidget.c:3305 + #, c-format +@@ -2591,7 +2591,7 @@ + + #: gtk/gtkfilechooserwidget.c:6378 gtk/gtkprintunixdialog.c:677 + msgid "_Replace" +-msgstr "ਬਦਲੋ(_R)" ++msgstr "ਬਦਲੋ" + + #: gtk/gtkfilechooserwidget.c:6592 + msgid "You do not have access to the specified folder." +@@ -2751,12 +2751,12 @@ + #. Open Link + #: gtk/gtklabel.c:6661 + msgid "_Open Link" +-msgstr "ਲਿੰਕ ਖੋਲ੍ਹੋ(_O)" ++msgstr "ਲਿੰਕ ਖੋਲ੍ਹੋ" + + #. Copy Link Address + #: gtk/gtklabel.c:6670 + msgid "Copy _Link Address" +-msgstr "ਲਿੰਕ ਐਡਰੈੱਸ ਕਾਪੀ ਕਰੋ(_L)" ++msgstr "ਲਿੰਕ ਐਡਰੈੱਸ ਕਾਪੀ ਕਰੋ" + + #: gtk/gtk-launch.c:42 + msgid "Show program version" +@@ -2901,11 +2901,11 @@ + + #: gtk/gtkmessagedialog.c:956 + msgid "_No" +-msgstr "ਨਹੀਂ(_N)" ++msgstr "ਨਹੀਂ" + + #: gtk/gtkmessagedialog.c:957 + msgid "_Yes" +-msgstr "ਹਾਂ(_Y)" ++msgstr "ਹਾਂ" + + #: gtk/gtkmountoperation.c:595 + msgid "Co_nnect" +@@ -2917,7 +2917,7 @@ + + #: gtk/gtkmountoperation.c:680 + msgid "_Anonymous" +-msgstr "ਅਣਛਪਾਤਾ(_A)" ++msgstr "ਅਣਛਪਾਤਾ" + + #: gtk/gtkmountoperation.c:689 + msgid "Registered U_ser" +@@ -2925,11 +2925,11 @@ + + #: gtk/gtkmountoperation.c:700 + msgid "_Username" +-msgstr "ਵਰਤੋਂਕਾਰ ਨਾਂ(_U)" ++msgstr "ਵਰਤੋਂਕਾਰ ਨਾਂ" + + #: gtk/gtkmountoperation.c:705 + msgid "_Domain" +-msgstr "ਡੋਮੇਨ(_D)" ++msgstr "ਡੋਮੇਨ" + + #: gtk/gtkmountoperation.c:714 + #| msgid "Volume Up" +@@ -2938,7 +2938,7 @@ + + #: gtk/gtkmountoperation.c:724 + msgid "_Hidden" +-msgstr "ਲੁਕਵਾਂ(_H)" ++msgstr "ਲੁਕਵਾਂ" + + #: gtk/gtkmountoperation.c:727 + #| msgctxt "input method menu" +@@ -2952,7 +2952,7 @@ + + #: gtk/gtkmountoperation.c:736 + msgid "_Password" +-msgstr "ਪਾਸਵਰਡ(_P)" ++msgstr "ਪਾਸਵਰਡ" + + #: gtk/gtkmountoperation.c:758 + msgid "Forget password _immediately" +@@ -2978,7 +2978,7 @@ + + #: gtk/gtkmountoperation.c:1392 + msgid "_End Process" +-msgstr "ਪਰੋਸੈਸ ਖਤਮ(_E)" ++msgstr "ਪਰੋਸੈਸ ਖਤਮ" + + #: gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -3144,45 +3144,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: gtk/gtkplacessidebar.c:2334 gtk/gtkplacessidebar.c:3713 + msgid "_Start" +-msgstr "ਸ਼ੁਰੂ(_S)" ++msgstr "ਸ਼ੁਰੂ" + + #: gtk/gtkplacessidebar.c:2335 gtk/gtkplacessidebar.c:3714 + msgid "_Stop" +-msgstr "ਰੋਕੋ(_S)" ++msgstr "ਰੋਕੋ" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: gtk/gtkplacessidebar.c:2342 + msgid "_Power On" +-msgstr "ਚਾਲੂ ਕਰੋ(_P)" ++msgstr "ਚਾਲੂ ਕਰੋ" + + #: gtk/gtkplacessidebar.c:2343 + msgid "_Safely Remove Drive" +-msgstr "ਡਰਾਇਵ ਸੁਰੱਖਿਅਤ ਹਟਾਓ(_S)" ++msgstr "ਡਰਾਇਵ ਸੁਰੱਖਿਅਤ ਹਟਾਓ" + + #: gtk/gtkplacessidebar.c:2347 + msgid "_Connect Drive" +-msgstr "ਡਰਾਇਵ ਕੁਨੈਕਟ ਕਰੋ(_C)" ++msgstr "ਡਰਾਇਵ ਕੁਨੈਕਟ ਕਰੋ" + + #: gtk/gtkplacessidebar.c:2348 + msgid "_Disconnect Drive" +-msgstr "ਡਰਾਇਵ ਡਿਸਕੁਨੈਕਟ ਕਰੋ(_D)" ++msgstr "ਡਰਾਇਵ ਡਿਸਕੁਨੈਕਟ ਕਰੋ" + + #: gtk/gtkplacessidebar.c:2352 + msgid "_Start Multi-disk Device" +-msgstr "ਮਲਟੀ-ਡਿਸਕ ਜੰਤਰ ਸ਼ੁਰੂ ਕਰੋ(_S)" ++msgstr "ਮਲਟੀ-ਡਿਸਕ ਜੰਤਰ ਸ਼ੁਰੂ ਕਰੋ" + + #: gtk/gtkplacessidebar.c:2353 + msgid "_Stop Multi-disk Device" +-msgstr "ਮਲਟੀ-ਡਿਸਕ ਜੰਤਰ ਰੋਕੋ(_S)" ++msgstr "ਮਲਟੀ-ਡਿਸਕ ਜੰਤਰ ਰੋਕੋ" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: gtk/gtkplacessidebar.c:2358 + msgid "_Unlock Device" +-msgstr "ਜੰਤਰ ਅਣ-ਲਾਕ ਕਰੋ(_U)" ++msgstr "ਜੰਤਰ ਅਣ-ਲਾਕ ਕਰੋ" + + #: gtk/gtkplacessidebar.c:2359 + msgid "_Lock Device" +-msgstr "ਜੰਤਰ ਲਾਕ ਕਰੋ(_L)" ++msgstr "ਜੰਤਰ ਲਾਕ ਕਰੋ" + + #: gtk/gtkplacessidebar.c:2397 gtk/gtkplacessidebar.c:3394 + #, c-format +@@ -3238,20 +3238,20 @@ + #: gtk/gtkplacessidebar.c:3630 gtk/gtkplacessidebar.c:3696 + #: gtk/gtkplacesview.c:1692 + msgid "Open in New _Tab" +-msgstr "ਨਵੀਂ ਟੈਬ 'ਚ ਖੋਲ੍ਹੋ(_T)" ++msgstr "ਨਵੀਂ ਟੈਬ 'ਚ ਖੋਲ੍ਹੋ" + + #: gtk/gtkplacessidebar.c:3636 gtk/gtkplacessidebar.c:3699 + #: gtk/gtkplacesview.c:1703 + msgid "Open in New _Window" +-msgstr "ਨਵੀਂ ਵਿੰਡੋ 'ਚ ਖੋਲ੍ਹੋ(_W)" ++msgstr "ਨਵੀਂ ਵਿੰਡੋ 'ਚ ਖੋਲ੍ਹੋ" + + #: gtk/gtkplacessidebar.c:3703 + msgid "_Add Bookmark" +-msgstr "ਬੁੱਕਮਾਰਕ ਸ਼ਾਮਲ(_A)" ++msgstr "ਬੁੱਕਮਾਰਕ ਸ਼ਾਮਲ" + + #: gtk/gtkplacessidebar.c:3704 + msgid "_Remove" +-msgstr "ਹਟਾਓ(_R)" ++msgstr "ਹਟਾਓ" + + #: gtk/gtkplacessidebar.c:3705 + msgid "Rename…" +@@ -3259,19 +3259,19 @@ + + #: gtk/gtkplacessidebar.c:3709 gtk/gtkplacesview.c:1737 + msgid "_Mount" +-msgstr "ਮਾਊਂਟ(_M)" ++msgstr "ਮਾਊਂਟ" + + #: gtk/gtkplacessidebar.c:3710 gtk/gtkplacesview.c:1727 + msgid "_Unmount" +-msgstr "ਅਣ-ਮਾਊਂਟ(_U)" ++msgstr "ਅਣ-ਮਾਊਂਟ" + + #: gtk/gtkplacessidebar.c:3711 + msgid "_Eject" +-msgstr "ਬਾਹਰ ਕੱਢੋ(_E)" ++msgstr "ਬਾਹਰ ਕੱਢੋ" + + #: gtk/gtkplacessidebar.c:3712 + msgid "_Detect Media" +-msgstr "ਮੀਡਿਆ ਖੋਜਿਆ(_D)" ++msgstr "ਮੀਡਿਆ ਖੋਜਿਆ" + + #: gtk/gtkplacessidebar.c:4158 gtk/gtkplacesview.c:1122 + msgid "Computer" +@@ -3347,11 +3347,11 @@ + + #: gtk/gtkplacesview.c:1727 + msgid "_Disconnect" +-msgstr "ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕਰੋ(_D)" ++msgstr "ਕੁਨੈਕਸ਼ਨ ਬੰਦ ਕਰੋ" + + #: gtk/gtkplacesview.c:1737 + msgid "_Connect" +-msgstr "ਕੁਨੈਕਟ ਕਰੋ(_C)" ++msgstr "ਕੁਨੈਕਟ ਕਰੋ" + + #: gtk/gtkplacesview.c:1878 + msgid "Unable to get remote server location" +@@ -3391,7 +3391,7 @@ + + #: gtk/gtkprintbackend.c:849 + msgid "_Remember password" +-msgstr "ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ(_R)" ++msgstr "ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ" + + #: gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3547,7 +3547,7 @@ + + #: gtk/gtkprintunixdialog.c:748 + msgid "_Print" +-msgstr "ਪਰਿੰਟ ਕਰੋ(_P)" ++msgstr "ਪਰਿੰਟ ਕਰੋ" + + #: gtk/gtkprintunixdialog.c:861 + msgid "Getting printer information failed" +@@ -3648,19 +3648,19 @@ + + #: gtk/gtkrecentchooserdefault.c:1689 + msgid "Copy _Location" +-msgstr "ਟਿਕਾਣਾ ਕਾਪੀ ਕਰੋ(_L)" ++msgstr "ਟਿਕਾਣਾ ਕਾਪੀ ਕਰੋ" + + #: gtk/gtkrecentchooserdefault.c:1700 + msgid "_Remove From List" +-msgstr "ਲਿਸਟ ਤੋਂ ਹਟਾਓ(_R)" ++msgstr "ਲਿਸਟ ਤੋਂ ਹਟਾਓ" + + #: gtk/gtkrecentchooserdefault.c:1707 + msgid "_Clear List" +-msgstr "ਲਿਸਟ ਸਾਫ਼ ਕਰੋ(_C)" ++msgstr "ਲਿਸਟ ਸਾਫ਼ ਕਰੋ" + + #: gtk/gtkrecentchooserdefault.c:1719 + msgid "Show _Private Resources" +-msgstr "ਪ੍ਰਾਈਵੇਟ ਸਰੋਤ ਵੇਖੋ(_P)" ++msgstr "ਪ੍ਰਾਈਵੇਟ ਸਰੋਤ ਵੇਖੋ" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3754,7 +3754,7 @@ + + #: gtk/gtkshortcutssection.c:451 + msgid "_Show All" +-msgstr "ਸਭ ਵੇਖਾਓ(_S)" ++msgstr "ਸਭ ਵੇਖਾਓ" + + #: gtk/gtkshortcutsshortcut.c:136 + msgid "Two finger pinch" +@@ -7089,11 +7089,11 @@ + + #: gtk/ui/gtkappchooserdialog.ui:78 + msgid "_View All Applications" +-msgstr "ਸਭ ਐਪਲੀਕੇਸ਼ਨ ਵੇਖੋ(_V)" ++msgstr "ਸਭ ਐਪਲੀਕੇਸ਼ਨ ਵੇਖੋ" + + #: gtk/ui/gtkappchooserdialog.ui:86 + msgid "_Find New Applications" +-msgstr "ਨਵੀਆਂ ਐਪਲੀਕੇਸ਼ਨ ਲੱਭੋ(_F)" ++msgstr "ਨਵੀਆਂ ਐਪਲੀਕੇਸ਼ਨ ਲੱਭੋ" + + #: gtk/ui/gtkappchooserwidget.ui:119 + msgid "No applications found." +@@ -7133,15 +7133,15 @@ + + #: gtk/ui/gtkassistant.ui:68 + msgid "_Next" +-msgstr "ਨਵਾਂ(_N)" ++msgstr "ਨਵਾਂ" + + #: gtk/ui/gtkassistant.ui:88 + msgid "_Back" +-msgstr "ਪਿੱਛੇ(_B)" ++msgstr "ਪਿੱਛੇ" + + #: gtk/ui/gtkassistant.ui:107 + msgid "_Finish" +-msgstr "ਮੁਕੰਮਲ(_F)" ++msgstr "ਮੁਕੰਮਲ" + + #: gtk/ui/gtkcolorchooserdialog.ui:6 + msgid "Select a Color" +@@ -7240,7 +7240,7 @@ + + #: gtk/ui/gtkfilechooserwidget.ui:461 + msgid "_Create" +-msgstr "ਬਣਾਓ(_C)" ++msgstr "ਬਣਾਓ" + + #: gtk/ui/gtkfontchooserdialog.ui:6 + msgid "Select Font" +@@ -7264,15 +7264,15 @@ + + #: gtk/ui/gtkpagesetupunixdialog.ui:47 + msgid "_Format for:" +-msgstr "ਫਾਰਮੈਟ(_F):" ++msgstr "ਫਾਰਮੈਟ:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:80 gtk/ui/gtkprintunixdialog.ui:747 + msgid "_Paper size:" +-msgstr "ਸਫ਼ਾ ਆਕਾਰ(_P):" ++msgstr "ਸਫ਼ਾ ਆਕਾਰ:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:122 + msgid "_Orientation:" +-msgstr "ਸਥਿਤੀ(_O):" ++msgstr "ਸਥਿਤੀ:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:152 gtk/ui/gtkprintunixdialog.ui:794 + msgid "Portrait" +@@ -7328,7 +7328,7 @@ + + #: gtk/ui/gtkplacesview.ui:307 + msgid "Connect to _Server" +-msgstr "ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਟ ਕਰੋ(_S)" ++msgstr "ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਟ ਕਰੋ" + + #: gtk/ui/gtkplacesview.ui:340 + msgid "Enter server address…" +@@ -7349,7 +7349,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:201 + msgid "_All Pages" +-msgstr "ਸਭ ਸਫ਼ਾ(_A)" ++msgstr "ਸਭ ਸਫ਼ਾ" + + #: gtk/ui/gtkprintunixdialog.ui:216 + msgid "C_urrent Page" +@@ -7390,7 +7390,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:375 + msgid "_Reverse" +-msgstr "ਉਲਟ(_R)" ++msgstr "ਉਲਟ" + + #: gtk/ui/gtkprintunixdialog.ui:452 + msgid "Layout" +@@ -7410,7 +7410,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:553 + msgid "_Only print:" +-msgstr "ਸਿਰਫ਼ ਪਰਿੰਟ(_O):" ++msgstr "ਸਿਰਫ਼ ਪਰਿੰਟ:" + + #: gtk/ui/gtkprintunixdialog.ui:570 + msgid "All sheets" +@@ -7458,7 +7458,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:923 + msgid "_Billing info:" +-msgstr "ਬਿੱਲ ਕਰਨ ਜਾਣਕਾਰੀ(_B):" ++msgstr "ਬਿੱਲ ਕਰਨ ਜਾਣਕਾਰੀ:" + + #: gtk/ui/gtkprintunixdialog.ui:967 + msgid "Print Document" +@@ -7467,7 +7467,7 @@ + #. this is one of the choices for the print at option in the print dialog + #: gtk/ui/gtkprintunixdialog.ui:987 + msgid "_Now" +-msgstr "ਹੁਣੇ(_N)" ++msgstr "ਹੁਣੇ" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: gtk/ui/gtkprintunixdialog.ui:1003 +@@ -7510,7 +7510,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: gtk/ui/gtkprintunixdialog.ui:1139 + msgid "_After:" +-msgstr "ਬਾਅਦ(_A):" ++msgstr "ਬਾਅਦ:" + + #: gtk/ui/gtkprintunixdialog.ui:1181 + msgid "Job" +@@ -8341,7 +8341,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "ਆਉਟਪੁੱਟ ਫਾਰਮੈਟ(_O)" ++msgstr "ਆਉਟਪੁੱਟ ਫਾਰਮੈਟ" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -8479,7 +8479,7 @@ + #~ msgstr "ਅਣ-ਹੈਂਡਲ ਟੈਗ: %s" + + #~ msgid "_Customize" +-#~ msgstr "ਪਸੰਦੀਦਾ(_C)" ++#~ msgstr "ਪਸੰਦੀਦਾ" + + #~ msgid "Yesterday at %-I:%M %P" + #~ msgstr "ਕੱਲ੍ਹ %-I:%M %P ਵਜੇ" +@@ -8661,7 +8661,7 @@ + #~ msgstr "੫x੭" + + #~ msgid "_Location:" +-#~ msgstr "ਟਿਕਾਣਾ(_L):" ++#~ msgstr "ਟਿਕਾਣਾ:" + + #~ msgid "Please select a folder below" + #~ msgstr "ਹੇਠਾਂ ਤੋਂ ਫੋਲਡਰ ਚੁਣੋ ਜੀ" +@@ -8759,10 +8759,10 @@ + #~ msgstr "ਐਪਲੀਕੇਸ਼ਨ ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕੀ" + + #~ msgid "Input _Methods" +-#~ msgstr "ਇੰਪੁੱਟ ਢੰਗ(_M)" ++#~ msgstr "ਇੰਪੁੱਟ ਢੰਗ" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "ਯੂਨੀਕੋਡ ਕੰਟਰੋਲ ਅੱਖਰ ਸ਼ਾਮਲ(_I)" ++#~ msgstr "ਯੂਨੀਕੋਡ ਕੰਟਰੋਲ ਅੱਖਰ ਸ਼ਾਮਲ" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "ਫਾਇਲ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪਰਾਪਤ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ" +@@ -8792,13 +8792,13 @@ + #~ msgstr "ਚੁਣੇ ਬੁੱਕਮਾਰਕ ਹਟਾਓ" + + #~ msgid "_Places" +-#~ msgstr "ਥਾਵਾਂ(_P)" ++#~ msgstr "ਥਾਵਾਂ" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "ਚੁਣਿਆ ਫੋਲਡਰ ਬੁੱਕਮਾਰਕ ਵਿੱਚ ਸ਼ਾਮਲ" + + #~ msgid "_Copy file’s location" +-#~ msgstr "ਫਾਇਲ ਦਾ ਟਿਕਾਣਾ ਕਾਪੀ ਕਰੋ(_C)" ++#~ msgstr "ਫਾਇਲ ਦਾ ਟਿਕਾਣਾ ਕਾਪੀ ਕਰੋ" + + #~ msgid "Save in _folder:" + #~ msgstr "ਫੋਲਡਰ ਵਿੱਚ ਸੰਭਾਲੋ(_f):" +@@ -8870,7 +8870,7 @@ + #~ msgstr "ਗਲਤ ਰੰਗ ਡਾਟਾ ਮਿਲਿਆ\n" + + #~ msgid "_Browse for other folders" +-#~ msgstr "ਹੋਰ ਫੋਲਡਰਾਂ ਲਈ ਝਲਕ(_B)" ++#~ msgstr "ਹੋਰ ਫੋਲਡਰਾਂ ਲਈ ਝਲਕ" + + #~ msgid "" + #~ "Could not find the icon '%s'. The '%s' theme\n" +@@ -8905,7 +8905,7 @@ + #~ msgstr "ਲੇਖਕ" + + #~ msgid "_Add" +-#~ msgstr "ਸ਼ਾਮਲ(_A)" ++#~ msgstr "ਸ਼ਾਮਲ" + + #~ msgid "Error creating folder '%s': %s" + #~ msgstr "ਫੋਲਡਰ '%s' ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s" +@@ -9575,13 +9575,13 @@ + #~ "ਕੀ ਤੁਸੀਂ ਇਸ ਨੂੰ ਚੁਣਨਾ ਚਾਹੁੰਦੇ ਹੋ?" + + #~ msgid "_New Folder" +-#~ msgstr "ਨਵਾਂ ਫੋਲਡਰ(_N)" ++#~ msgstr "ਨਵਾਂ ਫੋਲਡਰ" + + #~ msgid "De_lete File" + #~ msgstr "ਫਾਇਲ ਹਟਾਓ(_l)" + + #~ msgid "_Rename File" +-#~ msgstr "ਫਾਇਲ ਨਾਂ-ਬਦਲੋ(_R)" ++#~ msgstr "ਫਾਇਲ ਨਾਂ-ਬਦਲੋ" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -9638,7 +9638,7 @@ + #~ msgstr "ਗਾਮਾ" + + #~ msgid "_Gamma value" +-#~ msgstr "ਗਾਮਾ ਮੁੱਲ(_G)" ++#~ msgstr "ਗਾਮਾ ਮੁੱਲ" + + #~ msgid "Input" + #~ msgstr "ਇੰਪੁੱਟ" +@@ -9668,7 +9668,7 @@ + #~ msgstr "Y t_ilt" + + #~ msgid "_Wheel:" +-#~ msgstr "ਪਹੀਆ(_W):" ++#~ msgstr "ਪਹੀਆ:" + + #~ msgid "none" + #~ msgstr "ਕੋਈ ਨਹੀਂ" +@@ -9690,7 +9690,7 @@ + + #, fuzzy + #~ msgid "_Search:" +-#~ msgstr "ਖੋਜ(_S):" ++#~ msgstr "ਖੋਜ:" + + #, fuzzy + #~ msgid "Recently Used" +diff -urN a/po/si.po b/po/si.po +--- a/po/si.po 2025-06-09 19:54:59.561435054 -0700 ++++ b/po/si.po 2025-06-09 20:11:48.996739938 -0700 +@@ -92,7 +92,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "BackSpace" +-msgstr "ආදේශය (_R)" ++msgstr "ආදේශය" + + #: gdk/keyname-table.h:3941 + msgctxt "keyboard label" +@@ -136,13 +136,13 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Home" +-msgstr "නිවස (_H)" ++msgstr "නිවස" + + #: gdk/keyname-table.h:3949 + #, fuzzy + msgctxt "keyboard label" + msgid "Left" +-msgstr "වම (_L):" ++msgstr "වම:" + + #: gdk/keyname-table.h:3950 + msgctxt "keyboard label" +@@ -153,7 +153,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Right" +-msgstr "දකුණ (_R):" ++msgstr "දකුණ:" + + #: gdk/keyname-table.h:3952 + #, fuzzy +@@ -202,7 +202,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Space" +-msgstr "ආදේශය (_R)" ++msgstr "ආදේශය" + + #: gdk/keyname-table.h:3961 + msgctxt "keyboard label" +@@ -219,13 +219,13 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Home" +-msgstr "නිවස (_H)" ++msgstr "නිවස" + + #: gdk/keyname-table.h:3964 + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Left" +-msgstr "වම (_L):" ++msgstr "වම:" + + #: gdk/keyname-table.h:3965 + msgctxt "keyboard label" +@@ -236,7 +236,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Right" +-msgstr "දකුණ (_R):" ++msgstr "දකුණ:" + + #: gdk/keyname-table.h:3967 + msgctxt "keyboard label" +@@ -283,13 +283,13 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "KP_Delete" +-msgstr "මකන්න (_D)" ++msgstr "මකන්න" + + #: gdk/keyname-table.h:3976 + #, fuzzy + msgctxt "keyboard label" + msgid "Delete" +-msgstr "මකන්න (_D)" ++msgstr "මකන්න" + + #. Description of --sync in --help output + #: gdk/win32/gdkmain-win32.c:54 +@@ -367,7 +367,7 @@ + #. Add the license button + #: gtk/gtkaboutdialog.c:635 + msgid "_License" +-msgstr "බලපත්‍රය (_L)" ++msgstr "බලපත්‍රය" + + #: gtk/gtkaboutdialog.c:839 + #, fuzzy +@@ -465,7 +465,7 @@ + #, fuzzy + msgctxt "keyboard label" + msgid "Space" +-msgstr "ආදේශය (_R)" ++msgstr "ආදේශය" + + #: gtk/gtkaccellabel.c:816 + msgctxt "keyboard label" +@@ -628,7 +628,7 @@ + + #: gtk/gtkcolorsel.c:417 + msgid "_Hue:" +-msgstr "පැහැය (_H):" ++msgstr "පැහැය:" + + #: gtk/gtkcolorsel.c:418 + msgid "Position on the color wheel." +@@ -636,7 +636,7 @@ + + #: gtk/gtkcolorsel.c:420 + msgid "_Saturation:" +-msgstr "සංතෘප්ත බව (_S):" ++msgstr "සංතෘප්ත බව:" + + #: gtk/gtkcolorsel.c:421 + #, fuzzy +@@ -645,7 +645,7 @@ + + #: gtk/gtkcolorsel.c:422 + msgid "_Value:" +-msgstr "අගය (_V):" ++msgstr "අගය:" + + #: gtk/gtkcolorsel.c:423 + msgid "Brightness of the color." +@@ -653,7 +653,7 @@ + + #: gtk/gtkcolorsel.c:424 + msgid "_Red:" +-msgstr "රතු (_R):" ++msgstr "රතු:" + + #: gtk/gtkcolorsel.c:425 + msgid "Amount of red light in the color." +@@ -661,7 +661,7 @@ + + #: gtk/gtkcolorsel.c:426 + msgid "_Green:" +-msgstr "කොල (_G):" ++msgstr "කොල:" + + #: gtk/gtkcolorsel.c:427 + msgid "Amount of green light in the color." +@@ -669,7 +669,7 @@ + + #: gtk/gtkcolorsel.c:428 + msgid "_Blue:" +-msgstr "නිල් (_B):" ++msgstr "නිල්:" + + #: gtk/gtkcolorsel.c:429 + msgid "Amount of blue light in the color." +@@ -697,7 +697,7 @@ + + #: gtk/gtkcolorsel.c:500 + msgid "_Palette:" +-msgstr "වර්‍ණ තැටිය (_P):" ++msgstr "වර්‍ණ තැටිය:" + + #: gtk/gtkcolorsel.c:529 + msgid "Color Wheel" +@@ -728,7 +728,7 @@ + + #: gtk/gtkcolorsel.c:1396 + msgid "_Save color here" +-msgstr "මෙතැන වර්‍ණය සුරකින්න (_S)" ++msgstr "මෙතැන වර්‍ණය සුරකින්න" + + #: gtk/gtkcolorsel.c:1601 + msgid "" +@@ -774,11 +774,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1059 + msgid "_Width:" +-msgstr "පළල (_W):" ++msgstr "පළල:" + + #: gtk/gtkcustompaperunixdialog.c:1071 + msgid "_Height:" +-msgstr "උස (_H):" ++msgstr "උස:" + + #: gtk/gtkcustompaperunixdialog.c:1083 + msgid "Paper Size" +@@ -786,19 +786,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1092 + msgid "_Top:" +-msgstr "ඉහළ (_T):" ++msgstr "ඉහළ:" + + #: gtk/gtkcustompaperunixdialog.c:1104 + msgid "_Bottom:" +-msgstr "පහළ (_B):" ++msgstr "පහළ:" + + #: gtk/gtkcustompaperunixdialog.c:1116 + msgid "_Left:" +-msgstr "වම (_L):" ++msgstr "වම:" + + #: gtk/gtkcustompaperunixdialog.c:1128 + msgid "_Right:" +-msgstr "දකුණ (_R):" ++msgstr "දකුණ:" + + #: gtk/gtkcustompaperunixdialog.c:1169 + msgid "Paper Margins" +@@ -806,11 +806,11 @@ + + #: gtk/gtkentry.c:8601 gtk/gtktextview.c:8248 + msgid "Input _Methods" +-msgstr "ප්‍රධාන ක්‍රම (_M)" ++msgstr "ප්‍රධාන ක්‍රම" + + #: gtk/gtkentry.c:8615 gtk/gtktextview.c:8262 + msgid "_Insert Unicode Control Character" +-msgstr "යුනිකේත පාලන අක්‍ෂර ඇතුලත් කතන්න (_I)" ++msgstr "යුනිකේත පාලන අක්‍ෂර ඇතුලත් කතන්න" + + #: gtk/gtkentry.c:10015 + msgid "Caps Lock and Num Lock are on" +@@ -819,12 +819,12 @@ + #: gtk/gtkentry.c:10017 + #, fuzzy + msgid "Num Lock is on" +-msgstr "පිහිටීම පිටපත් කරන්න (_L)" ++msgstr "පිහිටීම පිටපත් කරන්න" + + #: gtk/gtkentry.c:10019 + #, fuzzy + msgid "Caps Lock is on" +-msgstr "පිහිටීම පිටපත් කරන්න (_L)" ++msgstr "පිහිටීම පිටපත් කරන්න" + + #. **************** * + #. * Private Macros * +@@ -947,11 +947,11 @@ + #. Column header for the file chooser's shortcuts pane + #: gtk/gtkfilechooserdefault.c:3650 + msgid "_Places" +-msgstr "ස්ථාන (_P)" ++msgstr "ස්ථාන" + + #: gtk/gtkfilechooserdefault.c:3706 + msgid "_Add" +-msgstr "එක් කරන්න (_A)" ++msgstr "එක් කරන්න" + + #: gtk/gtkfilechooserdefault.c:3713 + msgid "Add the selected folder to the Bookmarks" +@@ -959,7 +959,7 @@ + + #: gtk/gtkfilechooserdefault.c:3718 + msgid "_Remove" +-msgstr "ඉවත් කරන්න (_R)" ++msgstr "ඉවත් කරන්න" + + #: gtk/gtkfilechooserdefault.c:3860 + msgid "Could not select file" +@@ -996,11 +996,11 @@ + #. Label + #: gtk/gtkfilechooserdefault.c:4624 gtk/gtkprinteroptionwidget.c:801 + msgid "_Name:" +-msgstr "නම (_N):" ++msgstr "නම:" + + #: gtk/gtkfilechooserdefault.c:4667 + msgid "_Browse for other folders" +-msgstr "වෙනත් බහලුම් සඳහා සැරිසැරන්න (_B)" ++msgstr "වෙනත් බහලුම් සඳහා සැරිසැරන්න" + + #: gtk/gtkfilechooserdefault.c:4937 + msgid "Type a file name" +@@ -1013,7 +1013,7 @@ + + #: gtk/gtkfilechooserdefault.c:4990 + msgid "_Location:" +-msgstr "පිහිටීම (_L):" ++msgstr "පිහිටීම:" + + #: gtk/gtkfilechooserdefault.c:5194 + msgid "Save in _folder:" +@@ -1075,7 +1075,7 @@ + + #: gtk/gtkfilechooserdefault.c:8005 gtk/gtkprintunixdialog.c:491 + msgid "_Replace" +-msgstr "ආදේශය (_R)" ++msgstr "ආදේශය" + + #: gtk/gtkfilechooserdefault.c:8658 + msgid "Could not start the search process" +@@ -1196,11 +1196,11 @@ + + #: gtk/gtkfontsel.c:370 + msgid "_Family:" +-msgstr "කුළය (_F):" ++msgstr "කුළය:" + + #: gtk/gtkfontsel.c:376 + msgid "_Style:" +-msgstr "රටාව (_S):" ++msgstr "රටාව:" + + #: gtk/gtkfontsel.c:382 + msgid "Si_ze:" +@@ -1209,7 +1209,7 @@ + #. create the text entry widget + #: gtk/gtkfontsel.c:559 + msgid "_Preview:" +-msgstr "පෙර දැක්ම (_P):" ++msgstr "පෙර දැක්ම:" + + #: gtk/gtkfontsel.c:1659 + msgid "Font Selection" +@@ -1272,7 +1272,7 @@ + #: gtk/gtklabel.c:6202 + #, fuzzy + msgid "_Open Link" +-msgstr "විවෘත කරන්න (_O)" ++msgstr "විවෘත කරන්න" + + #. Copy Link Address + #: gtk/gtklabel.c:6214 +@@ -1350,17 +1350,17 @@ + #: gtk/gtkmountoperation.c:605 + #, fuzzy + msgid "_Username:" +-msgstr "නම වෙනස් කිරීම (_R)" ++msgstr "නම වෙනස් කිරීම" + + #: gtk/gtkmountoperation.c:610 + #, fuzzy + msgid "_Domain:" +-msgstr "පිහිටීම (_L):" ++msgstr "පිහිටීම:" + + #: gtk/gtkmountoperation.c:616 + #, fuzzy + msgid "_Password:" +-msgstr "පීඩනය (_P):" ++msgstr "පීඩනය:" + + #: gtk/gtkmountoperation.c:634 + msgid "Forget password _immediately" +@@ -1463,15 +1463,15 @@ + + #: gtk/gtkpagesetupunixdialog.c:909 + msgid "_Format for:" +-msgstr "සඳහා සංයුතිය (_F):" ++msgstr "සඳහා සංයුතිය:" + + #: gtk/gtkpagesetupunixdialog.c:931 gtk/gtkprintunixdialog.c:3456 + msgid "_Paper size:" +-msgstr "පිටු ප්‍රමාණය (_P):" ++msgstr "පිටු ප්‍රමාණය:" + + #: gtk/gtkpagesetupunixdialog.c:962 + msgid "_Orientation:" +-msgstr "දිශානතිය (_O):" ++msgstr "දිශානතිය:" + + #: gtk/gtkpagesetupunixdialog.c:1026 gtk/gtkprintunixdialog.c:3518 + msgid "Page Setup" +@@ -1505,7 +1505,7 @@ + + #: gtk/gtkprinteroptionwidget.c:813 + msgid "_Save in folder:" +-msgstr "බහලුම තුළ සුරකින්න (_S):" ++msgstr "බහලුම තුළ සුරකින්න:" + + #. translators: this string is the default job title for print + #. * jobs. %s gets replaced by the application name, %d gets replaced +@@ -1695,7 +1695,7 @@ + #: gtk/gtkprintunixdialog.c:2207 + #, fuzzy + msgid "Se_lection" +-msgstr "තෝරාගැනිම (_S): " ++msgstr "තෝරාගැනිම: " + + #: gtk/gtkprintunixdialog.c:2216 + #, fuzzy +@@ -1730,7 +1730,7 @@ + + #: gtk/gtkprintunixdialog.c:2271 + msgid "_Reverse" +-msgstr "ප්‍රතිවර්තනය (_R)" ++msgstr "ප්‍රතිවර්තනය" + + #: gtk/gtkprintunixdialog.c:2291 + msgid "General" +@@ -1827,7 +1827,7 @@ + + #: gtk/gtkprintunixdialog.c:3359 + msgid "_Only print:" +-msgstr "පමණක් මුද්‍රණය කරන්න (_O):" ++msgstr "පමණක් මුද්‍රණය කරන්න:" + + #. In enum order + #: gtk/gtkprintunixdialog.c:3374 +@@ -1865,7 +1865,7 @@ + #: gtk/gtkprintunixdialog.c:3480 + #, fuzzy + msgid "Or_ientation:" +-msgstr "දිශානතිය (_O):" ++msgstr "දිශානතිය:" + + #. In enum order + #: gtk/gtkprintunixdialog.c:3495 +@@ -1897,7 +1897,7 @@ + + #: gtk/gtkprintunixdialog.c:3564 + msgid "_Billing info:" +-msgstr "බිලේ තොරතුරු (_B):" ++msgstr "බිලේ තොරතුරු:" + + #: gtk/gtkprintunixdialog.c:3582 + msgid "Print Document" +@@ -1908,7 +1908,7 @@ + #. + #: gtk/gtkprintunixdialog.c:3591 + msgid "_Now" +-msgstr "දැන් (_N)" ++msgstr "දැන්" + + #: gtk/gtkprintunixdialog.c:3602 + msgid "A_t:" +@@ -1952,7 +1952,7 @@ + #. + #: gtk/gtkprintunixdialog.c:3682 + msgid "_After:" +-msgstr "පසු (_A):" ++msgstr "පසු:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -2028,15 +2028,15 @@ + + #: gtk/gtkrecentchooserdefault.c:1783 + msgid "Copy _Location" +-msgstr "පිහිටීම පිටපත් කරන්න (_L)" ++msgstr "පිහිටීම පිටපත් කරන්න" + + #: gtk/gtkrecentchooserdefault.c:1796 + msgid "_Remove From List" +-msgstr "ලැයිස්තුවෙන් ඉවත් කරන්න (_R)" ++msgstr "ලැයිස්තුවෙන් ඉවත් කරන්න" + + #: gtk/gtkrecentchooserdefault.c:1805 + msgid "_Clear List" +-msgstr "ලැයිස්තුව පැහැදිලි කරන්න (_C)" ++msgstr "ලැයිස්තුව පැහැදිලි කරන්න" + + #: gtk/gtkrecentchooserdefault.c:1819 + msgid "Show _Private Resources" +@@ -2140,31 +2140,31 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_About" +-msgstr "සම්බන්ධව (_A)" ++msgstr "සම්බන්ධව" + + #: gtk/gtkstock.c:322 + #, fuzzy + msgctxt "Stock label" + msgid "_Add" +-msgstr "එක් කරන්න (_A)" ++msgstr "එක් කරන්න" + + #: gtk/gtkstock.c:323 + #, fuzzy + msgctxt "Stock label" + msgid "_Apply" +-msgstr "යොද වන්න (_A)" ++msgstr "යොද වන්න" + + #: gtk/gtkstock.c:324 + #, fuzzy + msgctxt "Stock label" + msgid "_Bold" +-msgstr "තදකුරු (_B)" ++msgstr "තදකුරු" + + #: gtk/gtkstock.c:325 + #, fuzzy + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "අහෝසි (_C)" ++msgstr "අහෝසි" + + #: gtk/gtkstock.c:326 + #, fuzzy +@@ -2176,13 +2176,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Clear" +-msgstr "පැහැදිලි කරන්න (_C)" ++msgstr "පැහැදිලි කරන්න" + + #: gtk/gtkstock.c:328 + #, fuzzy + msgctxt "Stock label" + msgid "_Close" +-msgstr "වසන්න (_C)" ++msgstr "වසන්න" + + #: gtk/gtkstock.c:329 + #, fuzzy +@@ -2194,13 +2194,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Convert" +-msgstr "පරිවර්තනය (_C)" ++msgstr "පරිවර්තනය" + + #: gtk/gtkstock.c:331 + #, fuzzy + msgctxt "Stock label" + msgid "_Copy" +-msgstr "පිටපත් කරන්න (_C)" ++msgstr "පිටපත් කරන්න" + + #: gtk/gtkstock.c:332 + #, fuzzy +@@ -2212,7 +2212,7 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Delete" +-msgstr "මකන්න (_D)" ++msgstr "මකන්න" + + #: gtk/gtkstock.c:334 + #, fuzzy +@@ -2224,83 +2224,83 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "අසම්බන්ධ (_D)" ++msgstr "අසම්බන්ධ" + + #: gtk/gtkstock.c:336 + #, fuzzy + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ක්‍රියාත්මක කරන්න (_E)" ++msgstr "ක්‍රියාත්මක කරන්න" + + #: gtk/gtkstock.c:337 + #, fuzzy + msgctxt "Stock label" + msgid "_Edit" +-msgstr "සැකසුම් (_E)" ++msgstr "සැකසුම්" + + #: gtk/gtkstock.c:338 + #, fuzzy + msgctxt "Stock label" + msgid "_File" +-msgstr "ගොනුවම (_F)" ++msgstr "ගොනුවම" + + #: gtk/gtkstock.c:339 + #, fuzzy + msgctxt "Stock label" + msgid "_Find" +-msgstr "සොයන්න (_F)" ++msgstr "සොයන්න" + + #: gtk/gtkstock.c:340 + #, fuzzy + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "සෙවීම සහ ආදේෂය (_R)" ++msgstr "සෙවීම සහ ආදේෂය" + + #: gtk/gtkstock.c:341 + #, fuzzy + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "නම්‍ය තැටිය (_F)" ++msgstr "නම්‍ය තැටිය" + + #: gtk/gtkstock.c:342 + #, fuzzy + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "සම්පූර්ණ තිරය (_F)" ++msgstr "සම්පූර්ණ තිරය" + + #: gtk/gtkstock.c:343 + #, fuzzy + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "සම්පූර්ණ තිරයෙන් ඉවත් වන්න (_L)" ++msgstr "සම්පූර්ණ තිරයෙන් ඉවත් වන්න" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/gtkstock.c:345 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "පහළ (_B):" ++msgstr "පහළ:" + + #. This is a navigation label as in "go to the first page" + #: gtk/gtkstock.c:347 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "ගොනුවම (_F)" ++msgstr "ගොනුවම" + + #. This is a navigation label as in "go to the last page" + #: gtk/gtkstock.c:349 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "අලවන්න (_P)" ++msgstr "අලවන්න" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/gtkstock.c:351 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ඉහළ (_T):" ++msgstr "ඉහළ:" + + #. This is a navigation label as in "go back" + #: gtk/gtkstock.c:353 +@@ -2313,14 +2313,14 @@ + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "දැන් (_N)" ++msgstr "දැන්" + + #. This is a navigation label as in "go forward" + #: gtk/gtkstock.c:357 + #, fuzzy + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ඉදිරියට (_F)" ++msgstr "ඉදිරියට" + + #. This is a navigation label as in "go up" + #: gtk/gtkstock.c:359 +@@ -2332,19 +2332,19 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "දෘඩ තැටිය (_H)" ++msgstr "දෘඩ තැටිය" + + #: gtk/gtkstock.c:361 + #, fuzzy + msgctxt "Stock label" + msgid "_Help" +-msgstr "සහාය (_H)" ++msgstr "සහාය" + + #: gtk/gtkstock.c:362 + #, fuzzy + msgctxt "Stock label" + msgid "_Home" +-msgstr "නිවස (_H)" ++msgstr "නිවස" + + #: gtk/gtkstock.c:363 + #, fuzzy +@@ -2362,67 +2362,67 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Index" +-msgstr "පටුන (_I)" ++msgstr "පටුන" + + #: gtk/gtkstock.c:366 + #, fuzzy + msgctxt "Stock label" + msgid "_Information" +-msgstr "තොරතුරු (_I)" ++msgstr "තොරතුරු" + + #: gtk/gtkstock.c:367 + #, fuzzy + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ඇලකුරු (_I)" ++msgstr "ඇලකුරු" + + #: gtk/gtkstock.c:368 + #, fuzzy + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "වෙත පනින්න (_J)" ++msgstr "වෙත පනින්න" + + #. This is about text justification, "centered text" + #: gtk/gtkstock.c:370 + #, fuzzy + msgctxt "Stock label" + msgid "_Center" +-msgstr "පරිවර්තනය (_C)" ++msgstr "පරිවර්තනය" + + #. This is about text justification + #: gtk/gtkstock.c:372 + #, fuzzy + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ගොනුවම (_F)" ++msgstr "ගොනුවම" + + #. This is about text justification, "left-justified text" + #: gtk/gtkstock.c:374 + #, fuzzy + msgctxt "Stock label" + msgid "_Left" +-msgstr "වම (_L):" ++msgstr "වම:" + + #. This is about text justification, "right-justified text" + #: gtk/gtkstock.c:376 + #, fuzzy + msgctxt "Stock label" + msgid "_Right" +-msgstr "දකුණ (_R):" ++msgstr "දකුණ:" + + #. Media label, as in "fast forward" + #: gtk/gtkstock.c:379 + #, fuzzy + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ඉදිරියට (_F)" ++msgstr "ඉදිරියට" + + #. Media label, as in "next song" + #: gtk/gtkstock.c:381 + #, fuzzy + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "නව (_N)" ++msgstr "නව" + + #. Media label, as in "pause music" + #: gtk/gtkstock.c:383 +@@ -2436,7 +2436,7 @@ + #, fuzzy + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "ස්ථාන (_P)" ++msgstr "ස්ථාන" + + #. Media label, as in "previous song" + #: gtk/gtkstock.c:387 +@@ -2450,7 +2450,7 @@ + #, fuzzy + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "පටිගත කරන්න (_R)" ++msgstr "පටිගත කරන්න" + + #. Media label + #: gtk/gtkstock.c:391 +@@ -2464,37 +2464,37 @@ + #, fuzzy + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "නතර කරන්න (_S)" ++msgstr "නතර කරන්න" + + #: gtk/gtkstock.c:394 + #, fuzzy + msgctxt "Stock label" + msgid "_Network" +-msgstr "ජාලය (_N)" ++msgstr "ජාලය" + + #: gtk/gtkstock.c:395 + #, fuzzy + msgctxt "Stock label" + msgid "_New" +-msgstr "නව (_N)" ++msgstr "නව" + + #: gtk/gtkstock.c:396 + #, fuzzy + msgctxt "Stock label" + msgid "_No" +-msgstr "නැත (_N)" ++msgstr "නැත" + + #: gtk/gtkstock.c:397 + #, fuzzy + msgctxt "Stock label" + msgid "_OK" +-msgstr "හරි (_O)" ++msgstr "හරි" + + #: gtk/gtkstock.c:398 + #, fuzzy + msgctxt "Stock label" + msgid "_Open" +-msgstr "විවෘත කරන්න (_O)" ++msgstr "විවෘත කරන්න" + + #. Page orientation + #: gtk/gtkstock.c:400 +@@ -2533,19 +2533,19 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Paste" +-msgstr "අලවන්න (_P)" ++msgstr "අලවන්න" + + #: gtk/gtkstock.c:409 + #, fuzzy + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "අභිප්‍රේත (_P)" ++msgstr "අභිප්‍රේත" + + #: gtk/gtkstock.c:410 + #, fuzzy + msgctxt "Stock label" + msgid "_Print" +-msgstr "මුද්‍රණය (_P)" ++msgstr "මුද්‍රණය" + + #: gtk/gtkstock.c:411 + #, fuzzy +@@ -2557,93 +2557,93 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Properties" +-msgstr "වත්කම් (_P)" ++msgstr "වත්කම්" + + #: gtk/gtkstock.c:413 + #, fuzzy + msgctxt "Stock label" + msgid "_Quit" +-msgstr "පිට වන්න (_Q)" ++msgstr "පිට වන්න" + + #: gtk/gtkstock.c:414 + #, fuzzy + msgctxt "Stock label" + msgid "_Redo" +-msgstr "යළි කරන්න (_R)" ++msgstr "යළි කරන්න" + + #: gtk/gtkstock.c:415 + #, fuzzy + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ප්‍රබෝධ කරීම (_R)" ++msgstr "ප්‍රබෝධ කරීම" + + #: gtk/gtkstock.c:416 + #, fuzzy + msgctxt "Stock label" + msgid "_Remove" +-msgstr "ඉවත් කරන්න (_R)" ++msgstr "ඉවත් කරන්න" + + #: gtk/gtkstock.c:417 + #, fuzzy + msgctxt "Stock label" + msgid "_Revert" +-msgstr "පෙර තත්වයට පත් කිරීම (_R)" ++msgstr "පෙර තත්වයට පත් කිරීම" + + #: gtk/gtkstock.c:418 + #, fuzzy + msgctxt "Stock label" + msgid "_Save" +-msgstr "සුරකින්න (_S)" ++msgstr "සුරකින්න" + + #: gtk/gtkstock.c:419 + #, fuzzy + msgctxt "Stock label" + msgid "Save _As" +-msgstr "සුරකින අයුර (_A)" ++msgstr "සුරකින අයුර" + + #: gtk/gtkstock.c:420 + #, fuzzy + msgctxt "Stock label" + msgid "Select _All" +-msgstr "සියල්ල තෝරන්න (_A)" ++msgstr "සියල්ල තෝරන්න" + + #: gtk/gtkstock.c:421 + #, fuzzy + msgctxt "Stock label" + msgid "_Color" +-msgstr "වර්‍ණ (_C)" ++msgstr "වර්‍ණ" + + #: gtk/gtkstock.c:422 + #, fuzzy + msgctxt "Stock label" + msgid "_Font" +-msgstr "අක්‍ෂර (_F)" ++msgstr "අක්‍ෂර" + + #. Sorting direction + #: gtk/gtkstock.c:424 + #, fuzzy + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ආරෝහණ (_A)" ++msgstr "ආරෝහණ" + + #. Sorting direction + #: gtk/gtkstock.c:426 + #, fuzzy + msgctxt "Stock label" + msgid "_Descending" +-msgstr "අවරෝහණ (_D)" ++msgstr "අවරෝහණ" + + #: gtk/gtkstock.c:427 + #, fuzzy + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "අක්‍ෂරවින්‍යාසය පරීක්‍ෂාව (_S)" ++msgstr "අක්‍ෂරවින්‍යාසය පරීක්‍ෂාව" + + #: gtk/gtkstock.c:428 + #, fuzzy + msgctxt "Stock label" + msgid "_Stop" +-msgstr "නතර කරන්න (_S)" ++msgstr "නතර කරන්න" + + #. Font variant + #: gtk/gtkstock.c:430 +@@ -2655,33 +2655,33 @@ + #, fuzzy + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "නොමකන්න (_U)" ++msgstr "නොමකන්න" + + #. Font variant + #: gtk/gtkstock.c:433 + #, fuzzy + msgctxt "Stock label" + msgid "_Underline" +-msgstr "යටි ඉර (_U)" ++msgstr "යටි ඉර" + + #: gtk/gtkstock.c:434 + #, fuzzy + msgctxt "Stock label" + msgid "_Undo" +-msgstr "අහෝසි (_U)" ++msgstr "අහෝසි" + + #: gtk/gtkstock.c:435 + #, fuzzy + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ඔව් (_Y)" ++msgstr "ඔව්" + + #. Zoom + #: gtk/gtkstock.c:437 + #, fuzzy + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "සාමාන්‍ය ප්‍රමාණය (_N)" ++msgstr "සාමාන්‍ය ප්‍රමාණය" + + #. Zoom + #: gtk/gtkstock.c:439 +@@ -2693,13 +2693,13 @@ + #, fuzzy + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "විශාල කරන්න (_I)" ++msgstr "විශාල කරන්න" + + #: gtk/gtkstock.c:441 + #, fuzzy + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "කුඩා කරන්න (_O)" ++msgstr "කුඩා කරන්න" + + #: gtk/gtktextbufferrichtext.c:650 + #, c-format +@@ -3501,7 +3501,7 @@ + #, fuzzy + msgctxt "paper size" + msgid "Executive" +-msgstr "ක්‍රියාත්මක කරන්න (_E)" ++msgstr "ක්‍රියාත්මක කරන්න" + + #: gtk/paper_names_offsets.c:118 + msgctxt "paper size" +@@ -3542,7 +3542,7 @@ + #, fuzzy + msgctxt "paper size" + msgid "Index 3x5" +-msgstr "පටුන (_I)" ++msgstr "පටුන" + + #: gtk/paper_names_offsets.c:125 + #, fuzzy +@@ -3560,7 +3560,7 @@ + #, fuzzy + msgctxt "paper size" + msgid "Index 5x8" +-msgstr "පටුන (_I)" ++msgstr "පටුන" + + #: gtk/paper_names_offsets.c:128 + msgctxt "paper size" +@@ -3965,13 +3965,13 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:1020 + #, fuzzy + msgid "Username:" +-msgstr "නම වෙනස් කිරීම (_R)" ++msgstr "නම වෙනස් කිරීම" + + #: modules/printbackends/cups/gtkprintbackendcups.c:812 + #: modules/printbackends/cups/gtkprintbackendcups.c:1029 + #, fuzzy + msgid "Password:" +-msgstr "පීඩනය (_P):" ++msgstr "පීඩනය:" + + #: modules/printbackends/cups/gtkprintbackendcups.c:850 + #, c-format +@@ -4025,7 +4025,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:1014 + #, fuzzy + msgid "Domain:" +-msgstr "පිහිටීම (_L):" ++msgstr "පිහිටීම:" + + #: modules/printbackends/cups/gtkprintbackendcups.c:1044 + #, c-format +@@ -4240,7 +4240,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:3575 + #, fuzzy + msgid "Billing Info" +-msgstr "බිලේ තොරතුරු (_B):" ++msgstr "බිලේ තොරතුරු:" + + #. Translators, these strings are names for various 'standard' cover + #. * pages that the printing system may support. +@@ -4287,7 +4287,7 @@ + #: modules/printbackends/cups/gtkprintbackendcups.c:3640 + #, fuzzy + msgid "After" +-msgstr "පසු (_A):" ++msgstr "පසු:" + + #. Translators: this is the name of the option that controls when + #. * a print job is printed. Possible values are 'now', a specified time, +@@ -4348,7 +4348,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:651 + msgid "_Output format" +-msgstr "ප්‍රතිධාන සංයුතිය (_O)" ++msgstr "ප්‍රතිධාන සංයුතිය" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:395 + msgid "Print to LPR" +@@ -5050,13 +5050,13 @@ + #~ "ඔබට එය තෝරා ගැනීමට අවශ්‍යද? ඔබට විශ්වාසද ?" + + #~ msgid "_New Folder" +-#~ msgstr "නව බලුම (_N)" ++#~ msgstr "නව බලුම" + + #~ msgid "De_lete File" + #~ msgstr "ගොනුව මැකීම (_l)" + + #~ msgid "_Rename File" +-#~ msgstr "ගොනුවේ නම වෙනස් කිරීම (_R)" ++#~ msgstr "ගොනුවේ නම වෙනස් කිරීම" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -5066,7 +5066,7 @@ + #~ msgstr "නව බලුම" + + #~ msgid "_Folder name:" +-#~ msgstr "බහලුම් නම (_F):" ++#~ msgstr "බහලුම් නම:" + + #~ msgid "C_reate" + #~ msgstr "නිර්මාණය කරන්න (_r)" +@@ -5100,10 +5100,10 @@ + #~ msgstr "\"%s\" ගොනු නාමය වෙනස් කිරීම:" + + #~ msgid "_Rename" +-#~ msgstr "නම වෙනස් කිරීම (_R)" ++#~ msgstr "නම වෙනස් කිරීම" + + #~ msgid "_Selection: " +-#~ msgstr "තෝරාගැනිම (_S): " ++#~ msgstr "තෝරාගැනිම: " + + #~ msgid "" + #~ "The filename \"%s\" couldn't be converted to UTF-8. (try setting the " +@@ -5125,13 +5125,13 @@ + #~ msgstr "ගැමා" + + #~ msgid "_Gamma value" +-#~ msgstr "ගැමා අගය (_G)" ++#~ msgstr "ගැමා අගය" + + #~ msgid "Input" + #~ msgstr "ප්‍රධානය" + + #~ msgid "_Device:" +-#~ msgstr "උපාංගය (_D):" ++#~ msgstr "උපාංගය:" + + #~ msgid "Disabled" + #~ msgstr "අක්‍රීය" +@@ -5143,7 +5143,7 @@ + #~ msgstr "කවුළුව" + + #~ msgid "_Mode:" +-#~ msgstr "ආකාරය (_M):" ++#~ msgstr "ආකාරය:" + + #~ msgid "Axes" + #~ msgstr "කැපුම" +@@ -5158,7 +5158,7 @@ + #~ msgstr "_Y:" + + #~ msgid "_Pressure:" +-#~ msgstr "පීඩනය (_P):" ++#~ msgstr "පීඩනය:" + + #~ msgid "X _tilt:" + #~ msgstr "X ඇලවීම (_t):" +@@ -5167,7 +5167,7 @@ + #~ msgstr "Y ඇලවීම (_i):" + + #~ msgid "_Wheel:" +-#~ msgstr "චක්‍රය (_W):" ++#~ msgstr "චක්‍රය:" + + #~ msgid "none" + #~ msgstr "කිසිවක් නැත" +@@ -5189,7 +5189,7 @@ + + #, fuzzy + #~ msgid "_Search:" +-#~ msgstr "සොයන්න (_S):" ++#~ msgstr "සොයන්න:" + + #, fuzzy + #~ msgid "Recently Used" +@@ -5386,52 +5386,52 @@ + #~ msgstr "අවසන් කළා" + + #~ msgid "Navigation|_Bottom" +-#~ msgstr "පහළ (_B)" ++#~ msgstr "පහළ" + + #~ msgid "Navigation|_First" +-#~ msgstr "පළමු (_F)" ++#~ msgstr "පළමු" + + #~ msgid "Navigation|_Last" +-#~ msgstr "අවසාන (_L)" ++#~ msgstr "අවසාන" + + #~ msgid "Navigation|_Top" +-#~ msgstr "ඉහළ (_T)" ++#~ msgstr "ඉහළ" + + #~ msgid "Navigation|_Back" +-#~ msgstr "පසුපස (_B)" ++#~ msgstr "පසුපස" + + #~ msgid "Navigation|_Down" +-#~ msgstr "යට (_D)" ++#~ msgstr "යට" + + #~ msgid "Navigation|_Forward" +-#~ msgstr "ඉදිරිය (_F)" ++#~ msgstr "ඉදිරිය" + + #~ msgid "Navigation|_Up" +-#~ msgstr "උඩ (_U)" ++#~ msgstr "උඩ" + + #~ msgid "Justify|_Center" +-#~ msgstr "මධ්‍යය (_C)" ++#~ msgstr "මධ්‍යය" + + #~ msgid "Justify|_Fill" +-#~ msgstr "පිරවීම (_F)" ++#~ msgstr "පිරවීම" + + #~ msgid "Justify|_Left" +-#~ msgstr "වම (_L)" ++#~ msgstr "වම" + + #~ msgid "Justify|_Right" +-#~ msgstr "දකුණ (_R)" ++#~ msgstr "දකුණ" + + #~ msgid "Media|_Next" +-#~ msgstr "මීළඟ (_N)" ++#~ msgstr "මීළඟ" + + #~ msgid "Media|P_ause" + #~ msgstr "විරාමය (_a)" + + #~ msgid "Media|_Play" +-#~ msgstr "වාදනය කරන්න (_P)" ++#~ msgstr "වාදනය කරන්න" + + #~ msgid "Media|_Stop" +-#~ msgstr "නවතන්න (_S)" ++#~ msgstr "නවතන්න" + + #~ msgid "volume percentage|%d %%" + #~ msgstr "%d %%" +@@ -5830,7 +5830,7 @@ + #~ msgstr "ප්‍රකෘතිය" + + #~ msgid "_All" +-#~ msgstr "සියළු (_A)" ++#~ msgstr "සියළු" + + #~ msgid "Location:" + #~ msgstr "පිහිටීම:" +diff -urN a/po/ta.po b/po/ta.po +--- a/po/ta.po 2025-06-09 19:54:59.569435131 -0700 ++++ b/po/ta.po 2025-06-09 20:11:49.024740301 -0700 +@@ -571,7 +571,7 @@ + #: ../gtk/a11y/gtkcomboboxaccessible.c:310 + msgctxt "Action name" + msgid "Press" +-msgstr "அழுத்துதம் (_P)" ++msgstr "அழுத்துதம்" + + #: ../gtk/a11y/gtkcomboboxaccessible.c:319 + msgctxt "Action description" +@@ -594,17 +594,17 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "பற்றி (_A)" ++msgstr "பற்றி" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "சேர் (_A)" ++msgstr "சேர்" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "தடிப்பு (_B)" ++msgstr "தடிப்பு" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" +@@ -614,12 +614,12 @@ + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "துப்பரவாக்கு (_C)" ++msgstr "துப்பரவாக்கு" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "மூடு (_C)" ++msgstr "மூடு" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -636,7 +636,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "நகல் (_C)" ++msgstr "நகல்" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -646,7 +646,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "அழி (_D)" ++msgstr "அழி" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -672,12 +672,12 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "செயல்படுத்து (_E)" ++msgstr "செயல்படுத்து" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "கோப்பு (_F)" ++msgstr "கோப்பு" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" +@@ -687,80 +687,80 @@ + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "தேடி மாற்று (_R)" ++msgstr "தேடி மாற்று" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "நெகிழ்வட்டு (_F)" ++msgstr "நெகிழ்வட்டு" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "முழுத்திரை (_F)" ++msgstr "முழுத்திரை" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "கீழே (_B)" ++msgstr "கீழே" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "முதல் (_F)" ++msgstr "முதல்" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "கடைசி (_L)" ++msgstr "கடைசி" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "மேல் (_T)" ++msgstr "மேல்" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "பின்னால் (_B)" ++msgstr "பின்னால்" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "கீழே (_D)" ++msgstr "கீழே" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "முன்னோக்கு (_F)" ++msgstr "முன்னோக்கு" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "மேலே (_U)" ++msgstr "மேலே" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "நிலைவட்டு (_H)" ++msgstr "நிலைவட்டு" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "உதவி (_H)" ++msgstr "உதவி" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "இல்லம் (_H)" ++msgstr "இல்லம்" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -770,58 +770,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "தகவல் (_I)" ++msgstr "தகவல்" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "சாய்வு (_I)" ++msgstr "சாய்வு" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "தாவு (_J)" ++msgstr "தாவு" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "மையம் (_C)" ++msgstr "மையம்" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "நிரப்பு (_F)" ++msgstr "நிரப்பு" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "இடது (_L)" ++msgstr "இடது" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "வலது (_R)" ++msgstr "வலது" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "முழுத்திரையாக விடவும் (_L)" ++msgstr "முழுத்திரையாக விடவும்" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "முன்னோக்கு (_F)" ++msgstr "முன்னோக்கு" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "அடுத்து (_N)" ++msgstr "அடுத்து" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -833,7 +833,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "இயக்கு (_P)" ++msgstr "இயக்கு" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -845,7 +845,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "பதிவு (_R)" ++msgstr "பதிவு" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -857,32 +857,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "நிறுத்து (_S)" ++msgstr "நிறுத்து" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "பிணையம் (_N)" ++msgstr "பிணையம்" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "புதிய (_N)" ++msgstr "புதிய" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "திற (_O)" ++msgstr "திற" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "ஒட்டு (_P)" ++msgstr "ஒட்டு" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "அச்சிடு (_P)" ++msgstr "அச்சிடு" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -892,86 +892,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "பண்புகள் (_P)" ++msgstr "பண்புகள்" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "வெளியேறு (_Q)" ++msgstr "வெளியேறு" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "மீள் (_R)" ++msgstr "மீள்" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "புதுப்பி (_R)" ++msgstr "புதுப்பி" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "நீக்கு (_R)" ++msgstr "நீக்கு" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "நிலைமீட்டு (_R)" ++msgstr "நிலைமீட்டு" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "சேமி (_S)" ++msgstr "சேமி" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "மறுபெயரில் சேமி (_A)" ++msgstr "மறுபெயரில் சேமி" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "அனைத்தையும் தேர்ந்தெடு (_A)" ++msgstr "அனைத்தையும் தேர்ந்தெடு" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ஏறுவரிசை(_A)" ++msgstr "ஏறுவரிசை" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "இறங்குவரிசை (_D)" ++msgstr "இறங்குவரிசை" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "சொல்திருத்தி (_S)" ++msgstr "சொல்திருத்தி" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "நிறுத்து (_S)" ++msgstr "நிறுத்து" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "அடித்தல் (_S)" ++msgstr "அடித்தல்" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "அடிக்கோடு (_U)" ++msgstr "அடிக்கோடு" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "மறை (_U)" ++msgstr "மறை" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -982,23 +982,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "சாதாரண அளவு (_N)" ++msgstr "சாதாரண அளவு" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "சரியான பொருத்தம் (_F)" ++msgstr "சரியான பொருத்தம்" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "பெரிதாக்கு (_I)" ++msgstr "பெரிதாக்கு" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "சிறிதாக்கு (_O)" ++msgstr "சிறிதாக்கு" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1125,7 +1125,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "நிறத்தட்டு: (_P)" ++msgstr "நிறத்தட்டு:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1187,7 +1187,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "ரத்து (_C)" ++msgstr "ரத்து" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1195,11 +1195,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "தேர்ந்தெடு (_S)" ++msgstr "தேர்ந்தெடு" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "உதவி (_H)" ++msgstr "உதவி" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1231,13 +1231,13 @@ + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "செயல்படுத்து (_A)" ++msgstr "செயல்படுத்து" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11661 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "சரி (_O)" ++msgstr "சரி" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1255,12 +1255,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "செயல்படுத்து (_A)" ++msgstr "செயல்படுத்து" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ரத்து (_C)" ++msgstr "ரத்து" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1270,37 +1270,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "மாற்று (_C)" ++msgstr "மாற்று" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "கைவிடு (_D)" ++msgstr "கைவிடு" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "துண்டி (_D)" ++msgstr "துண்டி" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "தொகு (_E)" ++msgstr "தொகு" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "அகரவரிசை (_I)" ++msgstr "அகரவரிசை" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "இல்லை (_N)" ++msgstr "இல்லை" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "சரி (_O)" ++msgstr "சரி" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1334,27 +1334,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "முன்னுரிமைகள் (_P)" ++msgstr "முன்னுரிமைகள்" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "நிறம் (_C)" ++msgstr "நிறம்" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "எழுத்துரு (_F)" ++msgstr "எழுத்துரு" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "அழிக்காத (_U)" ++msgstr "அழிக்காத" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ஆம் (_Y)" ++msgstr "ஆம்" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2017,7 +2017,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "தனிப்பயனாக்கு (_C)" ++msgstr "தனிப்பயனாக்கு" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2032,7 +2032,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "மூடு (_C)" ++msgstr "மூடு" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2058,11 +2058,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "அகலம்: (_W)" ++msgstr "அகலம்:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "உயரம்: (_H)" ++msgstr "உயரம்:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2070,19 +2070,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "மேல்: (_T)" ++msgstr "மேல்:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "கீழ்: (_B)" ++msgstr "கீழ்:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "இடது: (_L)" ++msgstr "இடது:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "வலது: (_R)" ++msgstr "வலது:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2096,20 +2096,20 @@ + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "நகலெடு (_C)" ++msgstr "நகலெடு" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "ஒட்டு (_P)" ++msgstr "ஒட்டு" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "அழி (_D)" ++msgstr "அழி" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "அனைத்தையும் தேர்ந்தெடு (_A)" ++msgstr "அனைத்தையும் தேர்ந்தெடு" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2130,7 +2130,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3273 + msgid "_Open" +-msgstr "திற (_O)" ++msgstr "திற" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2203,28 +2203,28 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "கோப்பை பார்க்கவும் (_V)" ++msgstr "கோப்பை பார்க்கவும்" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +-msgstr "இருப்பிடத்தை நகலெடு (_C)" ++msgstr "இருப்பிடத்தை நகலெடு" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "புத்தக்குறிகளில் சேர் (_A)" ++msgstr "புத்தக்குறிகளில் சேர்" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "மறைவான கோப்புகளை காட்டு (_H)" ++msgstr "மறைவான கோப்புகளை காட்டு" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "நிரலின் அளவை காட்டு (_S)" ++msgstr "நிரலின் அளவை காட்டு" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "பெயர்: (_N)" ++msgstr "பெயர்:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2279,7 +2279,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "மாற்று (_R)" ++msgstr "மாற்று" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2380,12 +2380,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "இணைப்பை திற (_O)" ++msgstr "இணைப்பை திற" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "இணைப்பு முகவரியை நகலெடு (_L)" ++msgstr "இணைப்பு முகவரியை நகலெடு" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2533,11 +2533,11 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "இல்லை (_N)" ++msgstr "இல்லை" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "ஆம் (_Y)" ++msgstr "ஆம்" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2549,7 +2549,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "பெயரில்லாமல் (_A)" ++msgstr "பெயரில்லாமல்" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2557,15 +2557,15 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "பயனர்பெயர் (_U)" ++msgstr "பயனர்பெயர்" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "களம் (_D)" ++msgstr "களம்" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "கடவுச்சொல் (_P)" ++msgstr "கடவுச்சொல்" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +@@ -2590,7 +2590,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "செயலை முடிக்கவும் (_E)" ++msgstr "செயலை முடிக்கவும்" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2751,45 +2751,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2230 ../gtk/gtkplacessidebar.c:3351 + msgid "_Start" +-msgstr "துவக்கு (_S):" ++msgstr "துவக்கு:" + + #: ../gtk/gtkplacessidebar.c:2231 ../gtk/gtkplacessidebar.c:3358 + msgid "_Stop" +-msgstr "நிறுத்து (_S)" ++msgstr "நிறுத்து" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2238 + msgid "_Power On" +-msgstr "ஆன் செய் (_P)" ++msgstr "ஆன் செய்" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Safely Remove Drive" +-msgstr "பாதுகாப்பாக இயக்கியை நீக்கு (_S) " ++msgstr "பாதுகாப்பாக இயக்கியை நீக்கு " + + #: ../gtk/gtkplacessidebar.c:2243 + msgid "_Connect Drive" +-msgstr "இயக்கியை இணை (_C)" ++msgstr "இயக்கியை இணை" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Disconnect Drive" +-msgstr "இயக்கி அகற்று (_D) " ++msgstr "இயக்கி அகற்று " + + #: ../gtk/gtkplacessidebar.c:2248 + msgid "_Start Multi-disk Device" +-msgstr "பல் வட்டு சாதனத்தை துவக்கு (_S) " ++msgstr "பல் வட்டு சாதனத்தை துவக்கு " + + #: ../gtk/gtkplacessidebar.c:2249 + msgid "_Stop Multi-disk Device" +-msgstr "பல் வட்டு சாதனத்தை நிறுத்து (_S) " ++msgstr "பல் வட்டு சாதனத்தை நிறுத்து " + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2254 + msgid "_Unlock Drive" +-msgstr "இயக்கி பூட்டு திற (_U) " ++msgstr "இயக்கி பூட்டு திற " + + #: ../gtk/gtkplacessidebar.c:2255 + msgid "_Lock Drive" +-msgstr "இயக்கியை பூட்டு (_L) " ++msgstr "இயக்கியை பூட்டு " + + #: ../gtk/gtkplacessidebar.c:2284 ../gtk/gtkplacessidebar.c:3033 + #, c-format +@@ -2824,15 +2824,15 @@ + + #: ../gtk/gtkplacessidebar.c:3281 + msgid "Open in New _Tab" +-msgstr "புதிய கீற்றில் திற (_T)" ++msgstr "புதிய கீற்றில் திற" + + #: ../gtk/gtkplacessidebar.c:3290 + msgid "Open in New _Window" +-msgstr "புதிய சாளரத்தில் திற (_W)" ++msgstr "புதிய சாளரத்தில் திற" + + #: ../gtk/gtkplacessidebar.c:3299 + msgid "_Add Bookmark" +-msgstr "புத்தகக்குறியாகச் சேர் (_A)" ++msgstr "புத்தகக்குறியாகச் சேர்" + + #: ../gtk/gtkplacessidebar.c:3305 + msgid "Remove" +@@ -2844,19 +2844,19 @@ + + #: ../gtk/gtkplacessidebar.c:3323 + msgid "_Mount" +-msgstr "மவுன்ட் செய் (_M)" ++msgstr "மவுன்ட் செய்" + + #: ../gtk/gtkplacessidebar.c:3330 + msgid "_Unmount" +-msgstr "அன்மவுன்ட் செய் (_U)" ++msgstr "அன்மவுன்ட் செய்" + + #: ../gtk/gtkplacessidebar.c:3337 + msgid "_Eject" +-msgstr "வெளியேற்று (_E)" ++msgstr "வெளியேற்று" + + #: ../gtk/gtkplacessidebar.c:3344 + msgid "_Detect Media" +-msgstr "ஊடகத்தை கண்டுபிடி (_D) " ++msgstr "ஊடகத்தை கண்டுபிடி " + + #: ../gtk/gtkplacessidebar.c:3953 + msgid "Computer" +@@ -2868,7 +2868,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "கடவுச்சொல்லை நினைவில் கொள் (_R)" ++msgstr "கடவுச்சொல்லை நினைவில் கொள்" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3021,7 +3021,7 @@ + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "அச்சிடு (_P)" ++msgstr "அச்சிடு" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3124,19 +3124,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "இடத்தை நகலெடு (_L)" ++msgstr "இடத்தை நகலெடு" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "பட்டியலிலிருந்து நீக்கு (_R)" ++msgstr "பட்டியலிலிருந்து நீக்கு" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "பட்டியலை துடை (_C)" ++msgstr "பட்டியலை துடை" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "தனிப்பட்ட மூலங்களை காட்டு (_P)" ++msgstr "தனிப்பட்ட மூலங்களை காட்டு" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3342,11 +3342,11 @@ + + #: ../gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM இடமிருந்து-வலமாக குறி (_L)" ++msgstr "LRM இடமிருந்து-வலமாக குறி" + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM வலமிருந்து-இடமாக குறி (_R)" ++msgstr "RLM வலமிருந்து-இடமாக குறி" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3504,7 +3504,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "சேமி (_S)" ++msgstr "சேமி" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -5295,7 +5295,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "வெளியீடு வடிவம் (_O)" ++msgstr "வெளியீடு வடிவம்" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5354,11 +5354,11 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "அனைத்து பயன்பாடுகளையும் காட்டு (_V)" ++msgstr "அனைத்து பயன்பாடுகளையும் காட்டு" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + msgid "_Find New Applications" +-msgstr "புதிய பயன்பாடுகளைக் கண்டுபிடு (_F)" ++msgstr "புதிய பயன்பாடுகளைக் கண்டுபிடு" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5392,15 +5392,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "அடுத்து (_N)" ++msgstr "அடுத்து" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "பின்னால் (_B)" ++msgstr "பின்னால்" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "முடிக்கவும் (_F)" ++msgstr "முடிக்கவும்" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5448,7 +5448,7 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "இடம் (_L):" ++msgstr "இடம்:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5487,16 +5487,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "வடிவமை: (_F)" ++msgstr "வடிவமை:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "தாள் அளவு: (_P)" ++msgstr "தாள் அளவு:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "திசையமைப்பு: (_O)" ++msgstr "திசையமைப்பு:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5541,7 +5541,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "அனைத்து பக்கங்கள் (_A)" ++msgstr "அனைத்து பக்கங்கள்" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5583,7 +5583,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "பின்னோக்கு (_R)" ++msgstr "பின்னோக்கு" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5603,7 +5603,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "அச்சிடுதல் மட்டும்: (_O)" ++msgstr "அச்சிடுதல் மட்டும்:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5639,7 +5639,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:39 + msgid "Or_ientation:" +-msgstr "திசையமைப்பு (_O):" ++msgstr "திசையமைப்பு:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:45 + msgid "Job Details" +@@ -5651,7 +5651,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "இரசீது தகவல்: (_B)" ++msgstr "இரசீது தகவல்:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5660,7 +5660,7 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "இப்போது (_N)" ++msgstr "இப்போது" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 +@@ -5706,7 +5706,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "பின்: (_A)" ++msgstr "பின்:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5842,7 +5842,7 @@ + #~ msgstr "சன்மானம் (_r)" + + #~ msgid "_License" +-#~ msgstr "அங்கீகாரம் (_L)" ++#~ msgstr "அங்கீகாரம்" + + #~| msgid "Show other applications" + #~ msgid "Show Other Applications" +@@ -5901,14 +5901,14 @@ + #~ msgstr "தேர்ந்தெடுக்கப்பட்ட புத்தகக்குறியை நீக்கு" + + #~ msgid "_Places" +-#~ msgstr "இடங்கள் (_P)" ++#~ msgstr "இடங்கள்" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "தேர்ந்தெடுக்கப்பட்ட அடைவினை புத்தகக்குறியில் சேர்க்கவும்" + + #~| msgid "_Copy file's location" + #~ msgid "_Copy file’s location" +-#~ msgstr "கோப்பின் இடத்தை நகலெடுக்கவும் (_C)ுக்கவும் (_C)" ++#~ msgstr "கோப்பின் இடத்தை நகலெடுக்கவும்ுக்கவும்" + + #~ msgid "Save in _folder:" + #~ msgstr "அடைவில் சேமி: (_f)" +@@ -5989,10 +5989,10 @@ + #~ msgstr "_சேர்" + + #~ msgid "_Remove" +-#~ msgstr "நீக்கு (_R)" ++#~ msgstr "நீக்கு" + + #~ msgid "_Browse for other folders" +-#~ msgstr "பிற அமைவிற்கு உலாவவும் (_B)" ++#~ msgstr "பிற அமைவிற்கு உலாவவும்" + + #~ msgid "Error creating folder '%s': %s" + #~ msgstr "'%s' அடைவு உருவாக்கும் பிழை: %s" +@@ -6686,13 +6686,13 @@ + #~ "நீங்கள் அதனை தேர்ந்தெடுக்க வேண்டுமா?" + + #~ msgid "_New Folder" +-#~ msgstr "புதிய அடைவு (_N)" ++#~ msgstr "புதிய அடைவு" + + #~ msgid "De_lete File" + #~ msgstr "கோப்பினை அழி (_l)" + + #~ msgid "_Rename File" +-#~ msgstr "கோப்பின் பெயரை மாற்று (_R)" ++#~ msgstr "கோப்பின் பெயரை மாற்று" + + #~ msgid "" + #~ "The folder name \"%s\" contains symbols that are not allowed in filenames" +@@ -6702,7 +6702,7 @@ + #~ msgstr "புதிய அடைவு" + + #~ msgid "_Folder name:" +-#~ msgstr "அடைவு பெயர்: (_F)" ++#~ msgstr "அடைவு பெயர்:" + + #~ msgid "" + #~ "The filename \"%s\" contains symbols that are not allowed in filenames" +@@ -6782,7 +6782,7 @@ + #~ msgstr "Y சாய்வு: (_i)" + + #~ msgid "_Wheel:" +-#~ msgstr "சக்கரம்: (_W)" ++#~ msgstr "சக்கரம்:" + + #~ msgid "none" + #~ msgstr "ஒன்றுமில்லை" +diff -urN a/po/te.po b/po/te.po +--- a/po/te.po 2025-06-09 19:54:59.573435171 -0700 ++++ b/po/te.po 2025-06-09 20:11:49.036740457 -0700 +@@ -586,32 +586,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "గురించి (_A)" ++msgstr "గురించి" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "జతచేయి (_A)" ++msgstr "జతచేయి" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "మందం (_B)" ++msgstr "మందం" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_CD-ROM" +-msgstr "CD-Rom (_C)" ++msgstr "CD-Rom" + + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "శుభ్రంచేయి (_C)" ++msgstr "శుభ్రంచేయి" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "మూసివేయి (_C)" ++msgstr "మూసివేయి" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -628,7 +628,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "నకలించు (_C)" ++msgstr "నకలించు" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -638,7 +638,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "తొలగించు (_D)" ++msgstr "తొలగించు" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -664,95 +664,95 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "నిర్వర్తించు (_E)" ++msgstr "నిర్వర్తించు" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "ఫైలు (_F)" ++msgstr "ఫైలు" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "కనుగొను (_F)" ++msgstr "కనుగొను" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "వెతుకు మరియు ప్రతిస్థాపించు (_R)" ++msgstr "వెతుకు మరియు ప్రతిస్థాపించు" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ఫ్లాపీ (_F)" ++msgstr "ఫ్లాపీ" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "నిండుతెర (_F)" ++msgstr "నిండుతెర" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "క్రింద (_B)" ++msgstr "క్రింద" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "మొదలు (_F)" ++msgstr "మొదలు" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "చివర (_P)" ++msgstr "చివర" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "పైన (_T)" ++msgstr "పైన" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "వెనుక (_B)" ++msgstr "వెనుక" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "క్రింద (_D)" ++msgstr "క్రింద" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ముందు (_F)" ++msgstr "ముందు" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "పైన (_U)" ++msgstr "పైన" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "హార్డ్‍డిస్కు (_H)" ++msgstr "హార్డ్‍డిస్కు" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "సహాయం (_H)" ++msgstr "సహాయం" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "నివాసం (_H)" ++msgstr "నివాసం" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -762,58 +762,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "సమాచారం (_I)" ++msgstr "సమాచారం" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ఇటాలిక్ (_I)" ++msgstr "ఇటాలిక్" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ఇచటకు గెంతు (_J)" ++msgstr "ఇచటకు గెంతు" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "మధ్య (_C)" ++msgstr "మధ్య" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "నింపు (_F)" ++msgstr "నింపు" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "ఎడమ (_L)" ++msgstr "ఎడమ" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "కుడి (_R)" ++msgstr "కుడి" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "నిండుతెర వదిలిపెట్టు (_L)" ++msgstr "నిండుతెర వదిలిపెట్టు" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ముందు (_F)" ++msgstr "ముందు" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "తరువాత (_N)" ++msgstr "తరువాత" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -825,7 +825,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "ఆడించు (_P)" ++msgstr "ఆడించు" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -837,7 +837,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "రికార్డుచేయి (_R)" ++msgstr "రికార్డుచేయి" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -849,32 +849,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "ఆపివేయి (_S)" ++msgstr "ఆపివేయి" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "నెట్‌వర్క్ (_N)" ++msgstr "నెట్‌వర్క్" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "కొత్త (_N)" ++msgstr "కొత్త" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "తెరువు (_O)" ++msgstr "తెరువు" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "అతికించు (_P)" ++msgstr "అతికించు" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "ముద్రించు (_P)" ++msgstr "ముద్రించు" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -884,86 +884,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "లక్షణాలు (_P)" ++msgstr "లక్షణాలు" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "నిష్క్రమించు (_Q)" ++msgstr "నిష్క్రమించు" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "మళ్ళీచేయు (_R)" ++msgstr "మళ్ళీచేయు" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "తాజాపరుచు (_R)" ++msgstr "తాజాపరుచు" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "తీసివేయి (_R)" ++msgstr "తీసివేయి" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "యథాస్థితికి తెచ్చు (_R)" ++msgstr "యథాస్థితికి తెచ్చు" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "భద్రపరుచు (_S)" ++msgstr "భద్రపరుచు" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "ఇలా భద్రపరుచు (_A)" ++msgstr "ఇలా భద్రపరుచు" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "అన్నిటినీ ఎంచుకొను (_A)" ++msgstr "అన్నిటినీ ఎంచుకొను" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ఆరోహణ (_A)" ++msgstr "ఆరోహణ" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "అవరోహణ (_D)" ++msgstr "అవరోహణ" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "అక్షరక్రమ తనిఖీ (_S)" ++msgstr "అక్షరక్రమ తనిఖీ" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "ఆపివేయి (_S)" ++msgstr "ఆపివేయి" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "కొట్టివేత (_S)" ++msgstr "కొట్టివేత" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "కిందగీత (_U)" ++msgstr "కిందగీత" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "రద్దుచేయి (_U)" ++msgstr "రద్దుచేయి" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -974,23 +974,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "సాధారణ పరిమాణం (_N)" ++msgstr "సాధారణ పరిమాణం" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "ఉత్తమ అమరిక (_F)" ++msgstr "ఉత్తమ అమరిక" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "జూమ్‌పెంచు (_I)" ++msgstr "జూమ్‌పెంచు" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "జూమ్‌తగ్గించు (_O)" ++msgstr "జూమ్‌తగ్గించు" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1049,7 +1049,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "లేతఛాయ (_H):" ++msgstr "లేతఛాయ:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1057,7 +1057,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:462 + msgid "S_aturation:" +-msgstr "సాచురేషన్ (_S):" ++msgstr "సాచురేషన్:" + + #: ../gtk/deprecated/gtkcolorsel.c:463 + msgid "Intensity of the color." +@@ -1065,7 +1065,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "విలువ (_V):" ++msgstr "విలువ:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1073,7 +1073,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "ఎరుపు (_R):" ++msgstr "ఎరుపు:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1081,7 +1081,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "పచ్చ (_G):" ++msgstr "పచ్చ:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1089,7 +1089,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "నీలం(_B):" ++msgstr "నీలం:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1118,7 +1118,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "వర్ణపలకం (_P):" ++msgstr "వర్ణపలకం:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1155,7 +1155,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "వర్ణమును ఇక్కడ భద్రపరుచు (_S)" ++msgstr "వర్ణమును ఇక్కడ భద్రపరుచు" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1180,7 +1180,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "రద్దుచేయి (_C)" ++msgstr "రద్దుచేయి" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1188,11 +1188,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "ఎంచుకొను (_S)" ++msgstr "ఎంచుకొను" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "సహాయం (_H)" ++msgstr "సహాయం" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1206,11 +1206,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "కుటుంబం (_F):" ++msgstr "కుటుంబం:" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "శైలి (_S):" ++msgstr "శైలి:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1219,18 +1219,18 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "మునుజూపు (_P):" ++msgstr "మునుజూపు:" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "అనువర్తించు (_A)" ++msgstr "అనువర్తించు" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11661 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "సరే (_O)" ++msgstr "సరే" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1248,12 +1248,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "అనువర్తించు (_A)" ++msgstr "అనువర్తించు" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "రద్దుచేయి (_C)" ++msgstr "రద్దుచేయి" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1263,37 +1263,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "పరివర్తించు (_C)" ++msgstr "పరివర్తించు" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "వదిలివేయి (_D)" ++msgstr "వదిలివేయి" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "అననుసంధానించు (_D)" ++msgstr "అననుసంధానించు" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "సవరణ (_E)" ++msgstr "సవరణ" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "విషయసూచిక (_I)" ++msgstr "విషయసూచిక" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "వద్దు (_N)" ++msgstr "వద్దు" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "సరే (_O)" ++msgstr "సరే" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1327,27 +1327,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "ప్రాధాన్యతలు (_P)" ++msgstr "ప్రాధాన్యతలు" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "రంగు (_C)" ++msgstr "రంగు" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ఖతి (_F)" ++msgstr "ఖతి" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "తొలగించనిది (_U)" ++msgstr "తొలగించనిది" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "అవును (_Y)" ++msgstr "అవును" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2025,7 +2025,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "మూసివేయి (_C)" ++msgstr "మూసివేయి" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2051,11 +2051,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "వెడల్పు (_W):" ++msgstr "వెడల్పు:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "ఎత్తు (_H):" ++msgstr "ఎత్తు:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2063,19 +2063,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "పైన (_T):" ++msgstr "పైన:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "క్రింద (_B):" ++msgstr "క్రింద:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "ఎడమ (_L):" ++msgstr "ఎడమ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "కుడి (_R):" ++msgstr "కుడి:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2089,20 +2089,20 @@ + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "నకలించు (_C)" ++msgstr "నకలించు" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "అతికించు (_P)" ++msgstr "అతికించు" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "తొలగించు (_D)" ++msgstr "తొలగించు" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "అన్నిటినీ ఎంచుకొను (_A)" ++msgstr "అన్నిటినీ ఎంచుకొను" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2123,7 +2123,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3273 + msgid "_Open" +-msgstr "తెరువు (_O)" ++msgstr "తెరువు" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2194,28 +2194,28 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "దస్త్రము చూడండి (_V)" ++msgstr "దస్త్రము చూడండి" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +-msgstr "స్థానమును నకలుతీయి (_C)" ++msgstr "స్థానమును నకలుతీయి" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "ఇష్టాంశాలకు జతచేయి (_A)" ++msgstr "ఇష్టాంశాలకు జతచేయి" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "అదృశ్య ఫైళ్ళను చూపించు (_H)" ++msgstr "అదృశ్య ఫైళ్ళను చూపించు" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "పరిమాణం నిలువువరుసను చూపించు (_S)" ++msgstr "పరిమాణం నిలువువరుసను చూపించు" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "పేరు (_N):" ++msgstr "పేరు:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2269,7 +2269,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "ప్రతిస్థాపించు (_R)" ++msgstr "ప్రతిస్థాపించు" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2369,12 +2369,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "లంకెను తెరువు (_O)" ++msgstr "లంకెను తెరువు" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "లంకె చిరునామాను నకలుతీయి (_L)" ++msgstr "లంకె చిరునామాను నకలుతీయి" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2521,11 +2521,11 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "వద్దు (_N)" ++msgstr "వద్దు" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "అవును (_Y)" ++msgstr "అవును" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2537,7 +2537,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "అజ్ఙాతంగా (_A)" ++msgstr "అజ్ఙాతంగా" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2545,15 +2545,15 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "వాడుకరిపేరు (_U)" ++msgstr "వాడుకరిపేరు" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "డొమైన్ (_D)" ++msgstr "డొమైన్" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "సంకేతపదము (_P)" ++msgstr "సంకేతపదము" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +@@ -2578,7 +2578,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "ప్రక్రియను ముగించు (_E)" ++msgstr "ప్రక్రియను ముగించు" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2739,45 +2739,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2230 ../gtk/gtkplacessidebar.c:3351 + msgid "_Start" +-msgstr "ప్రారంభించు (_S)" ++msgstr "ప్రారంభించు" + + #: ../gtk/gtkplacessidebar.c:2231 ../gtk/gtkplacessidebar.c:3358 + msgid "_Stop" +-msgstr "ఆపివేయి (_S)" ++msgstr "ఆపివేయి" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2238 + msgid "_Power On" +-msgstr "పవర్ ఆన్ (_P)" ++msgstr "పవర్ ఆన్" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Safely Remove Drive" +-msgstr "డ్రైవును సురక్షితముగా తీసివేయండి (_S)" ++msgstr "డ్రైవును సురక్షితముగా తీసివేయండి" + + #: ../gtk/gtkplacessidebar.c:2243 + msgid "_Connect Drive" +-msgstr "డ్రైవును అనుసంధానించు (_C)" ++msgstr "డ్రైవును అనుసంధానించు" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Disconnect Drive" +-msgstr "డ్రైవును అననుసంధానించు (_D)" ++msgstr "డ్రైవును అననుసంధానించు" + + #: ../gtk/gtkplacessidebar.c:2248 + msgid "_Start Multi-disk Device" +-msgstr "బహుళ-డిస్కు పరికరమును ప్రారంభించు (_S)" ++msgstr "బహుళ-డిస్కు పరికరమును ప్రారంభించు" + + #: ../gtk/gtkplacessidebar.c:2249 + msgid "_Stop Multi-disk Device" +-msgstr "బహుళ-డిస్కు పరికరమును ఆపు (_S)" ++msgstr "బహుళ-డిస్కు పరికరమును ఆపు" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2254 + msgid "_Unlock Drive" +-msgstr "డ్రైవు తాళం తీయి (_U)" ++msgstr "డ్రైవు తాళం తీయి" + + #: ../gtk/gtkplacessidebar.c:2255 + msgid "_Lock Drive" +-msgstr "డ్రైవుకు తాళంవేయి (_L)" ++msgstr "డ్రైవుకు తాళంవేయి" + + #: ../gtk/gtkplacessidebar.c:2284 ../gtk/gtkplacessidebar.c:3033 + #, c-format +@@ -2812,15 +2812,15 @@ + + #: ../gtk/gtkplacessidebar.c:3281 + msgid "Open in New _Tab" +-msgstr "కొత్త ట్యాబ్‌లో తెరువు (_T)" ++msgstr "కొత్త ట్యాబ్‌లో తెరువు" + + #: ../gtk/gtkplacessidebar.c:3290 + msgid "Open in New _Window" +-msgstr "కొత్త కిటికీలో తెరువు(_W)" ++msgstr "కొత్త కిటికీలో తెరువు" + + #: ../gtk/gtkplacessidebar.c:3299 + msgid "_Add Bookmark" +-msgstr "ఇష్టాంశముగా చేయి (_A)" ++msgstr "ఇష్టాంశముగా చేయి" + + #: ../gtk/gtkplacessidebar.c:3305 + msgid "Remove" +@@ -2832,19 +2832,19 @@ + + #: ../gtk/gtkplacessidebar.c:3323 + msgid "_Mount" +-msgstr "మౌంట్(_M)" ++msgstr "మౌంట్" + + #: ../gtk/gtkplacessidebar.c:3330 + msgid "_Unmount" +-msgstr "అన్‌మౌంట్(_U)" ++msgstr "అన్‌మౌంట్" + + #: ../gtk/gtkplacessidebar.c:3337 + msgid "_Eject" +-msgstr "బయటకునెట్టు (_E)" ++msgstr "బయటకునెట్టు" + + #: ../gtk/gtkplacessidebar.c:3344 + msgid "_Detect Media" +-msgstr "మాధ్యమాన్ని కనిపెట్టు (_D)" ++msgstr "మాధ్యమాన్ని కనిపెట్టు" + + #: ../gtk/gtkplacessidebar.c:3953 + msgid "Computer" +@@ -2856,7 +2856,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "రహస్యపదాన్ని గుర్తించుము(_R)" ++msgstr "రహస్యపదాన్ని గుర్తించుము" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3007,7 +3007,7 @@ + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "ముద్రించు (_P)" ++msgstr "ముద్రించు" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3110,19 +3110,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "స్థానమును నకలుతీయు (_L)" ++msgstr "స్థానమును నకలుతీయు" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "జాబితా నుండి తీసివేయి (_R)" ++msgstr "జాబితా నుండి తీసివేయి" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "జాబితాను శుభ్రంచేయి (_C)" ++msgstr "జాబితాను శుభ్రంచేయి" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "వ్యక్తిగత మూలాలను చూపించు (_P)" ++msgstr "వ్యక్తిగత మూలాలను చూపించు" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3323,11 +3323,11 @@ + + #: ../gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM ఎడమ-నుండి-కుడి గుర్తు (_L)" ++msgstr "LRM ఎడమ-నుండి-కుడి గుర్తు" + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM కుడి-నుండి-ఎడమ గుర్తు (_R)" ++msgstr "RLM కుడి-నుండి-ఎడమ గుర్తు" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3347,11 +3347,11 @@ + + #: ../gtk/gtktextutil.c:63 + msgid "PDF _Pop directional formatting" +-msgstr "PDF నిర్దేశపూరిత రూపీకరణ (_P)" ++msgstr "PDF నిర్దేశపూరిత రూపీకరణ" + + #: ../gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS సున్నా వెడల్పు ఖాళీ (_Z)" ++msgstr "ZWS సున్నా వెడల్పు ఖాళీ" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +@@ -3477,7 +3477,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "భద్రపరుచు (_S)" ++msgstr "భద్రపరుచు" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -5265,7 +5265,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "అవుట్‌పుట్ ఆకృతి (_O)" ++msgstr "అవుట్‌పుట్ ఆకృతి" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5324,11 +5324,11 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "అన్ని అనువర్తనాలు చూడు (_V)" ++msgstr "అన్ని అనువర్తనాలు చూడు" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + msgid "_Find New Applications" +-msgstr "కొత్త అనువర్తనాలను కనుగొను (_F)" ++msgstr "కొత్త అనువర్తనాలను కనుగొను" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5362,15 +5362,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "తరువాత (_N)" ++msgstr "తరువాత" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "వెనుక (_B)" ++msgstr "వెనుక" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "పూర్తిచేయి (_F)" ++msgstr "పూర్తిచేయి" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5418,7 +5418,7 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "స్థానము (_L):" ++msgstr "స్థానము:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5455,16 +5455,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "దీనికొరకు ఆకృతి (_F):" ++msgstr "దీనికొరకు ఆకృతి:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "కాగితపు పరిమాణం (_P):" ++msgstr "కాగితపు పరిమాణం:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "నేపథ్య దృష్టి (_O):" ++msgstr "నేపథ్య దృష్టి:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5509,7 +5509,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "అన్ని పుటలు (_A)" ++msgstr "అన్ని పుటలు" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5551,7 +5551,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "అపసవ్యం (_R)" ++msgstr "అపసవ్యం" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5571,7 +5571,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "ముద్రణ మాత్రమే (_O):" ++msgstr "ముద్రణ మాత్రమే:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5619,7 +5619,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "బిల్లింగ్ సామాచారం(_B):" ++msgstr "బిల్లింగ్ సామాచారం:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5628,7 +5628,7 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "ఇప్పడు (_N)" ++msgstr "ఇప్పడు" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 +@@ -5674,7 +5674,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "తరువాత (_A):" ++msgstr "తరువాత:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5740,7 +5740,7 @@ + #~ msgstr "ఆన్‌చేయుట మరియు ఆపుట స్థితులను మార్చును" + + #~ msgid "_License" +-#~ msgstr "లైసెన్స్ (_L)" ++#~ msgstr "లైసెన్స్" + + #~ msgid "Homepage" + #~ msgstr "నివాసపుట" +@@ -5782,10 +5782,10 @@ + #~ msgstr "కొనసాగు (_o)" + + #~ msgid "Input _Methods" +-#~ msgstr "ఇన్‌పుట్ పద్ధతులు (_M)" ++#~ msgstr "ఇన్‌పుట్ పద్ధతులు" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "యునికోడ్ నియంత్రణ అక్షరాన్ని చొప్పించు (_I)" ++#~ msgstr "యునికోడ్ నియంత్రణ అక్షరాన్ని చొప్పించు" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "ఫైలు గురించిన సమాచారాన్ని సేకరించలేకపోయాము" +@@ -5818,13 +5818,13 @@ + #~ msgstr "స్థలములు" + + #~ msgid "_Places" +-#~ msgstr "స్థలములు (_P)" ++#~ msgstr "స్థలములు" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "ఎంచుకున్న సంచయమును ఇష్టాంశాలకు జతచేయి" + + #~ msgid "_Copy file’s location" +-#~ msgstr "ఫైలు యొక్క స్థానమును నకలుచేయి (_L)" ++#~ msgstr "ఫైలు యొక్క స్థానమును నకలుచేయి" + + #~ msgid "Type a file name" + #~ msgstr "ఒక ఫైలు పేరును టంకించండి" +@@ -5863,7 +5863,7 @@ + #~ msgstr "ఒక సంచయాన్ని ఎంచుకొను" + + #~ msgid "_Save in folder:" +-#~ msgstr "సంచయములో భద్రపరుచు (_S):" ++#~ msgstr "సంచయములో భద్రపరుచు:" + + #~ msgid "Caps Lock and Num Lock are on" + #~ msgstr "Caps Lock మరియు Num Lock అనైవున్నాయి" +diff -urN a/po/ug.po b/po/ug.po +--- a/po/ug.po 2025-06-09 19:54:59.581435250 -0700 ++++ b/po/ug.po 2025-06-09 20:11:49.056740716 -0700 +@@ -485,7 +485,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "رەڭ تەڭشەش(_H):" ++msgstr "رەڭ تەڭشەش:" + + #: ../gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -493,7 +493,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "S_aturation:" +-msgstr "تويۇنۇشچانلىقى(_A):" ++msgstr "تويۇنۇشچانلىقى:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Intensity of the color." +@@ -501,7 +501,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "قىممىتى(_V):" ++msgstr "قىممىتى:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -509,7 +509,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "قىزىل(_R):" ++msgstr "قىزىل:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -517,7 +517,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "يېشىل(_G):" ++msgstr "يېشىل:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -525,7 +525,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "كۆك(_B):" ++msgstr "كۆك:" + + #: ../gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -533,7 +533,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:476 + msgid "Op_acity:" +-msgstr "سۈزۈكلۈك(_A):" ++msgstr "سۈزۈكلۈك:" + + #: ../gtk/deprecated/gtkcolorsel.c:484 ../gtk/deprecated/gtkcolorsel.c:494 + msgid "Transparency of the color." +@@ -541,7 +541,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:501 + msgid "Color _name:" +-msgstr "رەڭ ئاتى(_N):" ++msgstr "رەڭ ئاتى:" + + #: ../gtk/deprecated/gtkcolorsel.c:516 + msgid "" +@@ -551,7 +551,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "رەڭ تاختىسى(_P):" ++msgstr "رەڭ تاختىسى:" + + #: ../gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -582,7 +582,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1491 + msgid "_Save color here" +-msgstr "رەڭنى بۇ جايغا ساقلا(_S)" ++msgstr "رەڭنى بۇ جايغا ساقلا" + + #: ../gtk/deprecated/gtkcolorsel.c:1695 + msgid "" +@@ -597,7 +597,7 @@ + #: ../gtk/gtkcolorchooserdialog.c:150 ../gtk/gtkfontchooserdialog.c:174 + #: ../gtk/gtkprinteroptionwidget.c:550 + msgid "_Select" +-msgstr "تاللا(_S)" ++msgstr "تاللا" + + #: ../gtk/deprecated/gtkcolorseldialog.c:219 + msgid "Color Selection" +@@ -611,20 +611,20 @@ + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Family:" +-msgstr "خەت نۇسخا تۈرى(_F):" ++msgstr "خەت نۇسخا تۈرى:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "_Style:" +-msgstr "ئۇسلۇب(_S):" ++msgstr "ئۇسلۇب:" + + #: ../gtk/deprecated/gtkfontsel.c:407 + msgid "Si_ze:" +-msgstr "چوڭلۇقى(_Z):" ++msgstr "چوڭلۇقى:" + + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:584 + msgid "_Preview:" +-msgstr "ئالدىن كۆزەت(_P):" ++msgstr "ئالدىن كۆزەت:" + + #: ../gtk/deprecated/gtkfontsel.c:1720 ../gtk/gtkfontchooserdialog.c:183 + msgid "Font Selection" +@@ -652,12 +652,12 @@ + #. Add the credits button + #: ../gtk/gtkaboutdialog.c:751 + msgid "C_redits" +-msgstr "تەشەككۈر(_R)" ++msgstr "تەشەككۈر" + + #. Add the license button + #: ../gtk/gtkaboutdialog.c:764 + msgid "_License" +-msgstr "ئىجازەت(_L)" ++msgstr "ئىجازەت" + + #: ../gtk/gtkaboutdialog.c:980 + msgid "Could not show link" +@@ -768,7 +768,7 @@ + + #: ../gtk/gtkappchooserdialog.c:188 + msgid "_Find applications online" +-msgstr "توردىن پروگرامما تاپ(_F)" ++msgstr "توردىن پروگرامما تاپ" + + #: ../gtk/gtkappchooserdialog.c:247 + msgid "Could not run application" +@@ -852,15 +852,15 @@ + + #: ../gtk/gtkassistant.c:1008 + msgid "C_ontinue" +-msgstr "داۋاملاشتۇر(_O)" ++msgstr "داۋاملاشتۇر" + + #: ../gtk/gtkassistant.c:1011 + msgid "Go _Back" +-msgstr "كەينىگە(_B)" ++msgstr "كەينىگە" + + #: ../gtk/gtkassistant.c:1015 + msgid "_Finish" +-msgstr "تامام(_F)" ++msgstr "تامام" + + #: ../gtk/gtkbuilder-menus.c:220 + #, c-format +@@ -1274,7 +1274,7 @@ + + #: ../gtk/gtkcolorswatch.c:447 + msgid "_Customize" +-msgstr "ئۆزلەشتۈر(_C)" ++msgstr "ئۆزلەشتۈر" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -1310,11 +1310,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1109 + msgid "_Width:" +-msgstr "كەڭلىك(_W):" ++msgstr "كەڭلىك:" + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Height:" +-msgstr "ئېگىزلىك(_H):" ++msgstr "ئېگىزلىك:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "Paper Size" +@@ -1322,19 +1322,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1140 + msgid "_Top:" +-msgstr "ئۈستى(_T):" ++msgstr "ئۈستى:" + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Bottom:" +-msgstr "ئاستى(_B):" ++msgstr "ئاستى:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Left:" +-msgstr "سول(_L):" ++msgstr "سول:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Right:" +-msgstr "ئوڭ(_R):" ++msgstr "ئوڭ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1212 + msgid "Paper Margins" +@@ -1342,11 +1342,11 @@ + + #: ../gtk/gtkentry.c:9127 ../gtk/gtktextview.c:8591 + msgid "Input _Methods" +-msgstr "كىرگۈزگۈچ(_M)" ++msgstr "كىرگۈزگۈچ" + + #: ../gtk/gtkentry.c:9141 ../gtk/gtktextview.c:8605 + msgid "_Insert Unicode Control Character" +-msgstr "يۇنىكودلۇق كونترول بەلگىسى قىستۇر(_I)" ++msgstr "يۇنىكودلۇق كونترول بەلگىسى قىستۇر" + + #: ../gtk/gtkentry.c:10094 + msgid "Caps Lock is on" +@@ -1524,7 +1524,7 @@ + #. Column header for the file chooser's shortcuts pane + #: ../gtk/gtkfilechooserdefault.c:3610 + msgid "_Places" +-msgstr "ئورۇن(_R)" ++msgstr "ئورۇن" + + #: ../gtk/gtkfilechooserdefault.c:3690 + msgid "Add the selected folder to the Bookmarks" +@@ -1536,23 +1536,23 @@ + + #: ../gtk/gtkfilechooserdefault.c:4176 + msgid "_Visit this file" +-msgstr "بۇ ھۆججەتنى كۆر(_S)" ++msgstr "بۇ ھۆججەتنى كۆر" + + #: ../gtk/gtkfilechooserdefault.c:4179 + msgid "_Copy file’s location" +-msgstr "ھۆججەتنىڭ ئورنىنى كۆچۈر(_C)" ++msgstr "ھۆججەتنىڭ ئورنىنى كۆچۈر" + + #: ../gtk/gtkfilechooserdefault.c:4182 + msgid "_Add to Bookmarks" +-msgstr "خەتكۈچكە قوش(_A)" ++msgstr "خەتكۈچكە قوش" + + #: ../gtk/gtkfilechooserdefault.c:4189 + msgid "Show _Hidden Files" +-msgstr "يوشۇرۇن ھۆججەتلەرنى كۆرسەت(_H)" ++msgstr "يوشۇرۇن ھۆججەتلەرنى كۆرسەت" + + #: ../gtk/gtkfilechooserdefault.c:4192 + msgid "Show _Size Column" +-msgstr "چوڭلۇق ئىستونىنى كۆرسەت(_S)" ++msgstr "چوڭلۇق ئىستونىنى كۆرسەت" + + #: ../gtk/gtkfilechooserdefault.c:4417 + msgid "Files" +@@ -1573,7 +1573,7 @@ + #. Label + #: ../gtk/gtkfilechooserdefault.c:4598 + msgid "_Name:" +-msgstr "ئاتى(_N):" ++msgstr "ئاتى:" + + #: ../gtk/gtkfilechooserdefault.c:4829 + msgid "Type a file name" +@@ -1590,7 +1590,7 @@ + #. Create Folder + #: ../gtk/gtkfilechooserdefault.c:4953 + msgid "Create Fo_lder" +-msgstr "قىسقۇچ قۇر(_L)" ++msgstr "قىسقۇچ قۇر" + + #: ../gtk/gtkfilechooserdefault.c:5001 + msgid "Search:" +@@ -1598,15 +1598,15 @@ + + #: ../gtk/gtkfilechooserdefault.c:5052 + msgid "_Location:" +-msgstr "ئورنى(_L):" ++msgstr "ئورنى:" + + #: ../gtk/gtkfilechooserdefault.c:5502 + msgid "Save in _folder:" +-msgstr "قىسقۇچقا ساقلا(_F):" ++msgstr "قىسقۇچقا ساقلا:" + + #: ../gtk/gtkfilechooserdefault.c:5504 + msgid "Create in _folder:" +-msgstr "قىسقۇچتا قۇر(_F):" ++msgstr "قىسقۇچتا قۇر:" + + #: ../gtk/gtkfilechooserdefault.c:6597 + #, c-format +@@ -1657,7 +1657,7 @@ + + #: ../gtk/gtkfilechooserdefault.c:8385 ../gtk/gtkprintunixdialog.c:559 + msgid "_Replace" +-msgstr "ئالماشتۇر(_R)" ++msgstr "ئالماشتۇر" + + #: ../gtk/gtkfilechooserdefault.c:9192 + msgid "Could not start the search process" +@@ -1743,12 +1743,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6139 + msgid "_Open Link" +-msgstr "ئۇلانما ئاچ(_O)" ++msgstr "ئۇلانما ئاچ" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6151 + msgid "Copy _Link Address" +-msgstr "ئۇلانما مەنزىل كۆچۈر(_L)" ++msgstr "ئۇلانما مەنزىل كۆچۈر" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -1885,7 +1885,7 @@ + + #: ../gtk/gtkmountoperation.c:535 + msgid "Co_nnect" +-msgstr "باغلا(_N)" ++msgstr "باغلا" + + #: ../gtk/gtkmountoperation.c:609 + msgid "Connect As" +@@ -1897,31 +1897,31 @@ + + #: ../gtk/gtkmountoperation.c:627 + msgid "Registered U_ser" +-msgstr "خەتلەتكەن ئىشلەتكۈچى(_U)" ++msgstr "خەتلەتكەن ئىشلەتكۈچى" + + #: ../gtk/gtkmountoperation.c:638 + msgid "_Username" +-msgstr "ئىشلەتكۈچى ئاتى(_U)" ++msgstr "ئىشلەتكۈچى ئاتى" + + #: ../gtk/gtkmountoperation.c:643 + msgid "_Domain" +-msgstr "دائىرە(_D)" ++msgstr "دائىرە" + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Password" +-msgstr "ئىم(_P)" ++msgstr "ئىم" + + #: ../gtk/gtkmountoperation.c:671 + msgid "Forget password _immediately" +-msgstr "ئىمنى دەرھال ئۇنتۇ(_I)" ++msgstr "ئىمنى دەرھال ئۇنتۇ" + + #: ../gtk/gtkmountoperation.c:681 + msgid "Remember password until you _logout" +-msgstr "تىزىمدىن چىقىشتىن ئىلگىرى ئىمنى ئەستە تۇت(_L)" ++msgstr "تىزىمدىن چىقىشتىن ئىلگىرى ئىمنى ئەستە تۇت" + + #: ../gtk/gtkmountoperation.c:691 + msgid "Remember _forever" +-msgstr "مەڭگۈ ئەستە تۇت(_F)" ++msgstr "مەڭگۈ ئەستە تۇت" + + #: ../gtk/gtkmountoperation.c:1080 + #, c-format +@@ -1934,7 +1934,7 @@ + + #: ../gtk/gtkmountoperation.c:1300 + msgid "_End Process" +-msgstr "ئىجرانى ئاخىرلاشتۇر(_E)" ++msgstr "ئىجرانى ئاخىرلاشتۇر" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2014,15 +2014,15 @@ + + #: ../gtk/gtkpagesetupunixdialog.c:896 + msgid "_Format for:" +-msgstr "پىچىم(_F):" ++msgstr "پىچىم:" + + #: ../gtk/gtkpagesetupunixdialog.c:917 ../gtk/gtkprintunixdialog.c:3477 + msgid "_Paper size:" +-msgstr "قەغەز چوڭلۇقى(_P):" ++msgstr "قەغەز چوڭلۇقى:" + + #: ../gtk/gtkpagesetupunixdialog.c:946 + msgid "_Orientation:" +-msgstr "يۆنىلىش(_O):" ++msgstr "يۆنىلىش:" + + #: ../gtk/gtkpagesetupunixdialog.c:1006 ../gtk/gtkprintunixdialog.c:3531 + msgid "Page Setup" +@@ -2215,19 +2215,19 @@ + + #: ../gtk/gtkprintunixdialog.c:2235 + msgid "_All Pages" +-msgstr "ھەممە بەت(_A)" ++msgstr "ھەممە بەت" + + #: ../gtk/gtkprintunixdialog.c:2240 + msgid "C_urrent Page" +-msgstr "نۆۋەتتىكى بەت(_U)" ++msgstr "نۆۋەتتىكى بەت" + + #: ../gtk/gtkprintunixdialog.c:2248 + msgid "Se_lection" +-msgstr "تاللا(_L)" ++msgstr "تاللا" + + #: ../gtk/gtkprintunixdialog.c:2254 + msgid "Pag_es:" +-msgstr "بەتلەر(_E):" ++msgstr "بەتلەر:" + + #: ../gtk/gtkprintunixdialog.c:2255 + msgid "" +@@ -2247,15 +2247,15 @@ + #. FIXME chpe: too much space between Copies and spinbutton, put those 2 in a hbox and make it span 2 columns + #: ../gtk/gtkprintunixdialog.c:2280 + msgid "Copie_s:" +-msgstr "نۇسخا سانى(_S):" ++msgstr "نۇسخا سانى:" + + #: ../gtk/gtkprintunixdialog.c:2296 + msgid "C_ollate" +-msgstr "رەت بويىچە(_O)" ++msgstr "رەت بويىچە" + + #: ../gtk/gtkprintunixdialog.c:2302 + msgid "_Reverse" +-msgstr "ئەكسىچە(_R)" ++msgstr "ئەكسىچە" + + #: ../gtk/gtkprintunixdialog.c:2318 + msgid "General" +@@ -2337,19 +2337,19 @@ + + #: ../gtk/gtkprintunixdialog.c:3356 + msgid "T_wo-sided:" +-msgstr "قوش يۈزلۈك(_W):" ++msgstr "قوش يۈزلۈك:" + + #: ../gtk/gtkprintunixdialog.c:3368 + msgid "Pages per _side:" +-msgstr "ھەربىر يۈزىنىڭ بەت سانى(_S):" ++msgstr "ھەربىر يۈزىنىڭ بەت سانى:" + + #: ../gtk/gtkprintunixdialog.c:3382 + msgid "Page or_dering:" +-msgstr "بەت تەرتىپى(_D):" ++msgstr "بەت تەرتىپى:" + + #: ../gtk/gtkprintunixdialog.c:3395 + msgid "_Only print:" +-msgstr "بېسىشلا(_O):" ++msgstr "بېسىشلا:" + + #. In enum order + #: ../gtk/gtkprintunixdialog.c:3407 +@@ -2366,7 +2366,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3412 + msgid "Sc_ale:" +-msgstr "نىسبەت(_A):" ++msgstr "نىسبەت:" + + #: ../gtk/gtkprintunixdialog.c:3436 + msgid "Paper" +@@ -2374,19 +2374,19 @@ + + #: ../gtk/gtkprintunixdialog.c:3440 + msgid "Paper _type:" +-msgstr "قەغەز تىپى(_T):" ++msgstr "قەغەز تىپى:" + + #: ../gtk/gtkprintunixdialog.c:3452 + msgid "Paper _source:" +-msgstr "قەغەز مەنبەسى(_S):" ++msgstr "قەغەز مەنبەسى:" + + #: ../gtk/gtkprintunixdialog.c:3464 + msgid "Output t_ray:" +-msgstr "قەغەز قۇتىسى(_R):" ++msgstr "قەغەز قۇتىسى:" + + #: ../gtk/gtkprintunixdialog.c:3497 + msgid "Or_ientation:" +-msgstr "يۆنىلىش(_I):" ++msgstr "يۆنىلىش:" + + #. In enum order + #: ../gtk/gtkprintunixdialog.c:3509 +@@ -2411,11 +2411,11 @@ + + #: ../gtk/gtkprintunixdialog.c:3560 + msgid "Pri_ority:" +-msgstr "مەرتىۋىسى(_O):" ++msgstr "مەرتىۋىسى:" + + #: ../gtk/gtkprintunixdialog.c:3572 + msgid "_Billing info:" +-msgstr "ھەق ھېسابلاش ئۇچۇرى(_B):" ++msgstr "ھەق ھېسابلاش ئۇچۇرى:" + + #: ../gtk/gtkprintunixdialog.c:3587 + msgid "Print Document" +@@ -2426,11 +2426,11 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3594 + msgid "_Now" +-msgstr "دەرھال(_N)" ++msgstr "دەرھال" + + #: ../gtk/gtkprintunixdialog.c:3603 + msgid "A_t:" +-msgstr "دە(_T):" ++msgstr "دە:" + + #. Translators: Ability to parse the am/pm format depends on actual locale. + #. * You can remove the am/pm values below for your locale if they are not +@@ -2449,7 +2449,7 @@ + + #: ../gtk/gtkprintunixdialog.c:3631 + msgid "On _hold" +-msgstr "كۈت(_H)" ++msgstr "كۈت" + + #: ../gtk/gtkprintunixdialog.c:3632 + msgid "Hold the job until it is explicitly released" +@@ -2464,14 +2464,14 @@ + #. + #: ../gtk/gtkprintunixdialog.c:3657 + msgid "Be_fore:" +-msgstr "ئالدى(_F):" ++msgstr "ئالدى:" + + #. Translators, this is the label used for the option in the print + #. * dialog that controls the back cover page. + #. + #: ../gtk/gtkprintunixdialog.c:3672 + msgid "_After:" +-msgstr "كەينى(_A):" ++msgstr "كەينى:" + + #. Translators: this is the tab label for the notebook tab containing + #. * job-specific options in the print dialog +@@ -2531,19 +2531,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1774 + msgid "Copy _Location" +-msgstr "ئورۇن كۆچۈر(_L)" ++msgstr "ئورۇن كۆچۈر" + + #: ../gtk/gtkrecentchooserdefault.c:1787 + msgid "_Remove From List" +-msgstr "تىزىملىكتىن چىقىرىۋەت(_R)" ++msgstr "تىزىملىكتىن چىقىرىۋەت" + + #: ../gtk/gtkrecentchooserdefault.c:1796 + msgid "_Clear List" +-msgstr "تىزىملىكنى تازىلا(_C)" ++msgstr "تىزىملىكنى تازىلا" + + #: ../gtk/gtkrecentchooserdefault.c:1810 + msgid "Show _Private Resources" +-msgstr "شەخسى مەنبەنى كۆرسەت(_P)" ++msgstr "شەخسى مەنبەنى كۆرسەت" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -2633,27 +2633,27 @@ + #: ../gtk/gtkstock.c:332 + msgctxt "Stock label" + msgid "_About" +-msgstr "ھەققىدە(_A)" ++msgstr "ھەققىدە" + + #: ../gtk/gtkstock.c:333 + msgctxt "Stock label" + msgid "_Add" +-msgstr "قوش(_A)" ++msgstr "قوش" + + #: ../gtk/gtkstock.c:334 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "قوللان(_A)" ++msgstr "قوللان" + + #: ../gtk/gtkstock.c:335 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "توم(_B)" ++msgstr "توم" + + #: ../gtk/gtkstock.c:336 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ئەمەلدىن قالدۇر(_C)" ++msgstr "ئەمەلدىن قالدۇر" + + #: ../gtk/gtkstock.c:337 + msgctxt "Stock label" +@@ -2663,77 +2663,77 @@ + #: ../gtk/gtkstock.c:338 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "تازىلا(_C)" ++msgstr "تازىلا" + + #: ../gtk/gtkstock.c:339 + msgctxt "Stock label" + msgid "_Close" +-msgstr "ياپ(_C)" ++msgstr "ياپ" + + #: ../gtk/gtkstock.c:340 + msgctxt "Stock label" + msgid "C_onnect" +-msgstr "ئۇلا(_O)" ++msgstr "ئۇلا" + + #: ../gtk/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "ئايلاندۇر(_C)" ++msgstr "ئايلاندۇر" + + #: ../gtk/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "كۆچۈر(_C)" ++msgstr "كۆچۈر" + + #: ../gtk/gtkstock.c:343 + msgctxt "Stock label" + msgid "Cu_t" +-msgstr "كەس(_T)" ++msgstr "كەس" + + #: ../gtk/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "ئۆچۈر(_D)" ++msgstr "ئۆچۈر" + + #: ../gtk/gtkstock.c:345 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "تاشلىۋەت(_D)" ++msgstr "تاشلىۋەت" + + #: ../gtk/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "ئۈز(_D)" ++msgstr "ئۈز" + + #: ../gtk/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ئىجرا قىل(_E)" ++msgstr "ئىجرا قىل" + + #: ../gtk/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "تەھرىر(_E)" ++msgstr "تەھرىر" + + #: ../gtk/gtkstock.c:349 + msgctxt "Stock label" + msgid "_File" +-msgstr "ھۆججەت(_F)" ++msgstr "ھۆججەت" + + #: ../gtk/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Find" +-msgstr "ئىزدە(_F)" ++msgstr "ئىزدە" + + #: ../gtk/gtkstock.c:351 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ئىزدەپ ئالماشتۇر(_R)" ++msgstr "ئىزدەپ ئالماشتۇر" + + #: ../gtk/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "يۇمشاق دىسكا(_F)" ++msgstr "يۇمشاق دىسكا" + + #: ../gtk/gtkstock.c:353 + msgctxt "Stock label" +@@ -2743,70 +2743,70 @@ + #: ../gtk/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "پۈتۈن ئېكراندىن ئايرىل(_L)" ++msgstr "پۈتۈن ئېكراندىن ئايرىل" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/gtkstock.c:356 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "ئاستى(_B)" ++msgstr "ئاستى" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/gtkstock.c:358 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "بىرىنچى(_F)" ++msgstr "بىرىنچى" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/gtkstock.c:360 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "ئاخىرقى(_L)" ++msgstr "ئاخىرقى" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/gtkstock.c:362 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "بېشى(_T)" ++msgstr "بېشى" + + #. This is a navigation label as in "go back" + #: ../gtk/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "كەينى(_B)" ++msgstr "كەينى" + + #. This is a navigation label as in "go down" + #: ../gtk/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "ئاستىغا(_D)" ++msgstr "ئاستىغا" + + #. This is a navigation label as in "go forward" + #: ../gtk/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ئالدىغا(_F)" ++msgstr "ئالدىغا" + + #. This is a navigation label as in "go up" + #: ../gtk/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ئۈستىگە(_U)" ++msgstr "ئۈستىگە" + + #: ../gtk/gtkstock.c:371 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "قاتتىق دىسكا(_H)" ++msgstr "قاتتىق دىسكا" + + #: ../gtk/gtkstock.c:372 + msgctxt "Stock label" + msgid "_Help" +-msgstr "ياردەم(_H)" ++msgstr "ياردەم" + + #: ../gtk/gtkstock.c:373 + msgctxt "Stock label" + msgid "_Home" +-msgstr "باش بەت(_H)" ++msgstr "باش بەت" + + #: ../gtk/gtkstock.c:374 + msgctxt "Stock label" +@@ -2821,88 +2821,88 @@ + #: ../gtk/gtkstock.c:376 + msgctxt "Stock label" + msgid "_Index" +-msgstr "ئىندېكس(_I)" ++msgstr "ئىندېكس" + + #: ../gtk/gtkstock.c:377 + msgctxt "Stock label" + msgid "_Information" +-msgstr "ئۇچۇر(_I)" ++msgstr "ئۇچۇر" + + #: ../gtk/gtkstock.c:378 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "يانتۇ (_I)" ++msgstr "يانتۇ" + + #: ../gtk/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ئاتلا(_J)" ++msgstr "ئاتلا" + + #. This is about text justification, "centered text" + #: ../gtk/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Center" +-msgstr "ئوتتۇرا(_C)" ++msgstr "ئوتتۇرا" + + #. This is about text justification + #: ../gtk/gtkstock.c:383 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "تولدۇر(_F)" ++msgstr "تولدۇر" + + #. This is about text justification, "left-justified text" + #: ../gtk/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Left" +-msgstr "سول(_L)" ++msgstr "سول" + + #. This is about text justification, "right-justified text" + #: ../gtk/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Right" +-msgstr "ئوڭ(_R)" ++msgstr "ئوڭ" + + #. Media label, as in "fast forward" + #: ../gtk/gtkstock.c:390 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ئالدىغا(_F)" ++msgstr "ئالدىغا" + + #. Media label, as in "next song" + #: ../gtk/gtkstock.c:392 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "كېيىنكى(_N)" ++msgstr "كېيىنكى" + + #. Media label, as in "pause music" + #: ../gtk/gtkstock.c:394 + msgctxt "Stock label, media" + msgid "P_ause" +-msgstr "ۋاقىتلىق توختات(_A)" ++msgstr "ۋاقىتلىق توختات" + + #. Media label, as in "play music" + #: ../gtk/gtkstock.c:396 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "قوي(_P)" ++msgstr "قوي" + + #. Media label, as in "previous song" + #: ../gtk/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "Pre_vious" +-msgstr "ئالدىنقى(_V)" ++msgstr "ئالدىنقى" + + #. Media label + #: ../gtk/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "خاتىرىلە(_R)" ++msgstr "خاتىرىلە" + + #. Media label + #: ../gtk/gtkstock.c:402 + msgctxt "Stock label, media" + msgid "R_ewind" +-msgstr "تېز چېكىن(_E)" ++msgstr "تېز چېكىن" + + #. Media label + #: ../gtk/gtkstock.c:404 +@@ -2913,27 +2913,27 @@ + #: ../gtk/gtkstock.c:405 + msgctxt "Stock label" + msgid "_Network" +-msgstr "تور(_N)" ++msgstr "تور" + + #: ../gtk/gtkstock.c:406 + msgctxt "Stock label" + msgid "_New" +-msgstr "يېڭىدىن قۇر(_N)" ++msgstr "يېڭىدىن قۇر" + + #: ../gtk/gtkstock.c:407 + msgctxt "Stock label" + msgid "_No" +-msgstr "ياق(_N)" ++msgstr "ياق" + + #: ../gtk/gtkstock.c:408 + msgctxt "Stock label" + msgid "_OK" +-msgstr "جەزملە(_O)" ++msgstr "جەزملە" + + #: ../gtk/gtkstock.c:409 + msgctxt "Stock label" + msgid "_Open" +-msgstr "ئاچ(_O)" ++msgstr "ئاچ" + + #. Page orientation + #: ../gtk/gtkstock.c:411 +@@ -2962,99 +2962,99 @@ + #: ../gtk/gtkstock.c:418 + msgctxt "Stock label" + msgid "Page Set_up" +-msgstr "بەت تەڭشەك(_U)" ++msgstr "بەت تەڭشەك" + + #: ../gtk/gtkstock.c:419 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "چاپلا(_P)" ++msgstr "چاپلا" + + #: ../gtk/gtkstock.c:420 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "مايىللىق(_P)" ++msgstr "مايىللىق" + + #: ../gtk/gtkstock.c:421 + msgctxt "Stock label" + msgid "_Print" +-msgstr "باس(_P)" ++msgstr "باس" + + #: ../gtk/gtkstock.c:422 + msgctxt "Stock label" + msgid "Print Pre_view" +-msgstr "بېسىشنى ئالدىن كۆزەت(_V)" ++msgstr "بېسىشنى ئالدىن كۆزەت" + + #: ../gtk/gtkstock.c:423 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "خاسلىق(_P)" ++msgstr "خاسلىق" + + #: ../gtk/gtkstock.c:424 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "ئاخىرلاشتۇر(_Q)" ++msgstr "ئاخىرلاشتۇر" + + #: ../gtk/gtkstock.c:425 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "قايتىلا(_R)" ++msgstr "قايتىلا" + + #: ../gtk/gtkstock.c:426 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "يېڭىلا(_R)" ++msgstr "يېڭىلا" + + #: ../gtk/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "چىقىرىۋەت(_R)" ++msgstr "چىقىرىۋەت" + + #: ../gtk/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "ئەسلىگە قايتۇر(_R)" ++msgstr "ئەسلىگە قايتۇر" + + #: ../gtk/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Save" +-msgstr "ساقلا(_S)" ++msgstr "ساقلا" + + #: ../gtk/gtkstock.c:430 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "باشقا ئاتتا ساقلا(_A)" ++msgstr "باشقا ئاتتا ساقلا" + + #: ../gtk/gtkstock.c:431 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "ھەممىنى تاللا(_A)" ++msgstr "ھەممىنى تاللا" + + #: ../gtk/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Color" +-msgstr "رەڭ(_C)" ++msgstr "رەڭ" + + #: ../gtk/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Font" +-msgstr "خەت نۇسخا(_F)" ++msgstr "خەت نۇسخا" + + #. Sorting direction + #: ../gtk/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ئۆسكۈچى(_A)" ++msgstr "ئۆسكۈچى" + + #. Sorting direction + #: ../gtk/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "كېمەيگۈچى(_D)" ++msgstr "كېمەيگۈچى" + + #: ../gtk/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "ئىملا تەكشۈر(_S)" ++msgstr "ئىملا تەكشۈر" + + #: ../gtk/gtkstock.c:439 + msgctxt "Stock label" +@@ -3065,50 +3065,50 @@ + #: ../gtk/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "ئۆچۈرۈش سىزىقى (_S)" ++msgstr "ئۆچۈرۈش سىزىقى" + + #: ../gtk/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "ئەسلىگە كەلتۈر(_U)" ++msgstr "ئەسلىگە كەلتۈر" + + #. Font variant + #: ../gtk/gtkstock.c:444 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "ئاستى سىزىق(_U)" ++msgstr "ئاستى سىزىق" + + #: ../gtk/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "يېنىۋال(_U)" ++msgstr "يېنىۋال" + + #: ../gtk/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ھەئە(_Y)" ++msgstr "ھەئە" + + #. Zoom + #: ../gtk/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "ئادەتتىكى چوڭلۇقى(_N)" ++msgstr "ئادەتتىكى چوڭلۇقى" + + #. Zoom + #: ../gtk/gtkstock.c:450 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "ئەڭ مۇناسىپ(_F)" ++msgstr "ئەڭ مۇناسىپ" + + #: ../gtk/gtkstock.c:451 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "چوڭايت(_I)" ++msgstr "چوڭايت" + + #: ../gtk/gtkstock.c:452 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "كىچىكلەت(_O)" ++msgstr "كىچىكلەت" + + #. Translators: if the "on" state label requires more than three + #. * glyphs then use MEDIUM VERTICAL BAR (U+2759) as the text for +@@ -3243,43 +3243,43 @@ + + #: ../gtk/gtktextutil.c:58 + msgid "LRM _Left-to-right mark" +-msgstr "LRM سولدىن ئوڭغا بەلگىسى(_L)" ++msgstr "LRM سولدىن ئوڭغا بەلگىسى" + + #: ../gtk/gtktextutil.c:59 + msgid "RLM _Right-to-left mark" +-msgstr "RLM ئوڭدىن سولغا بەلگىسى(_R)" ++msgstr "RLM ئوڭدىن سولغا بەلگىسى" + + #: ../gtk/gtktextutil.c:60 + msgid "LRE Left-to-right _embedding" +-msgstr "LRE سولدىن ئوڭغا سىڭدۈرمە(_E)" ++msgstr "LRE سولدىن ئوڭغا سىڭدۈرمە" + + #: ../gtk/gtktextutil.c:61 + msgid "RLE Right-to-left e_mbedding" +-msgstr "RLE ئوڭدىن سولغا سىڭدۈرمە(_M)" ++msgstr "RLE ئوڭدىن سولغا سىڭدۈرمە" + + #: ../gtk/gtktextutil.c:62 + msgid "LRO Left-to-right _override" +-msgstr "LRO سولدىن ئوڭغا قاپلاش(_O)" ++msgstr "LRO سولدىن ئوڭغا قاپلاش" + + #: ../gtk/gtktextutil.c:63 + msgid "RLO Right-to-left o_verride" +-msgstr "RLO ئوڭدىن سولغا قاپلاش(_V)" ++msgstr "RLO ئوڭدىن سولغا قاپلاش" + + #: ../gtk/gtktextutil.c:64 + msgid "PDF _Pop directional formatting" +-msgstr "PDF قاڭقىش يۆنىلىش فورماتى(_P)" ++msgstr "PDF قاڭقىش يۆنىلىش فورماتى" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWS _Zero width space" +-msgstr "ZWS نۆل كەڭلىكتىكى بوشلۇق(_Z)" ++msgstr "ZWS نۆل كەڭلىكتىكى بوشلۇق" + + #: ../gtk/gtktextutil.c:66 + msgid "ZWJ Zero width _joiner" +-msgstr "ZWJ نۆل كەڭلىكتىكى ئۇلاش بەلگىسى(_J)" ++msgstr "ZWJ نۆل كەڭلىكتىكى ئۇلاش بەلگىسى" + + #: ../gtk/gtktextutil.c:67 + msgid "ZWNJ Zero width _non-joiner" +-msgstr "ZWNJ نۆل كەڭلىكتىكى ئۇلىماسلىق بەلگىسى (_N)" ++msgstr "ZWNJ نۆل كەڭلىكتىكى ئۇلىماسلىق بەلگىسى" + + #: ../gtk/gtkuimanager.c:1781 + #, c-format +@@ -4708,7 +4708,7 @@ + #: ../modules/printbackends/file/gtkprintbackendfile.c:660 + #: ../modules/printbackends/test/gtkprintbackendtest.c:501 + msgid "Pages per _sheet:" +-msgstr "ھەر ۋاراق بەت سانى(_S):" ++msgstr "ھەر ۋاراق بەت سانى:" + + #: ../modules/printbackends/file/gtkprintbackendfile.c:719 + msgid "File" +@@ -4716,7 +4716,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:729 + msgid "_Output format" +-msgstr "چىقىرىش فورماتى(_O)" ++msgstr "چىقىرىش فورماتى" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -4799,13 +4799,13 @@ + #~ msgstr "يول مەۋجۇت ئەمەس." + + #~ msgid "Connect as u_ser:" +-#~ msgstr "باغلىنىش سالاھىيىتى(_S):" ++#~ msgstr "باغلىنىش سالاھىيىتى:" + + #~ msgid "Manage Custom Sizes..." + #~ msgstr "ئىختىيارى چوڭلۇق باشقۇر…" + + #~ msgid "_Save in folder:" +-#~ msgstr "قىسقۇچتا ساقلا(_S):" ++#~ msgstr "قىسقۇچتا ساقلا:" + + #~ msgid "Could not get information for file '%s': %s" + #~ msgstr "'%s' ھۆججەتنىڭ ئۇچۇرىغا ئېرىشەلمىدى:%s" +@@ -4820,7 +4820,7 @@ + #~ "بولۇشى مۇمكىن" + + #~ msgid "_Browse for other folders" +-#~ msgstr "باشقا قىسقۇچقا كۆز يۈگۈرت(_B)" ++#~ msgstr "باشقا قىسقۇچقا كۆز يۈگۈرت" + + #~ msgid "Received invalid color data\n" + #~ msgstr "ئىناۋەتسىز رەڭ سانلىق-مەلۇماتى تاپشۇرۇۋالدى\n" +diff -urN a/po/zh_CN.po b/po/zh_CN.po +--- a/po/zh_CN.po 2025-06-09 20:05:32.435563863 -0700 ++++ b/po/zh_CN.po 2025-06-09 20:11:49.204742638 -0700 +@@ -649,17 +649,17 @@ + #: gtk/a11y/gtkimageaccessible.c:53 gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_About" +-msgstr "关于(_A)" ++msgstr "关于" + + #: gtk/a11y/gtkimageaccessible.c:54 gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Add" +-msgstr "添加(_A)" ++msgstr "添加" + + #: gtk/a11y/gtkimageaccessible.c:55 gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "粗体(_B)" ++msgstr "粗体" + + #: gtk/a11y/gtkimageaccessible.c:56 gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" +@@ -669,12 +669,12 @@ + #: gtk/a11y/gtkimageaccessible.c:57 gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "清除(_C)" ++msgstr "清除" + + #: gtk/a11y/gtkimageaccessible.c:58 gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Close" +-msgstr "关闭(_C)" ++msgstr "关闭" + + #: gtk/a11y/gtkimageaccessible.c:59 gtk/gtkheaderbar.c:415 gtk/gtkwindow.c:9320 + msgid "Minimize" +@@ -691,17 +691,17 @@ + #: gtk/a11y/gtkimageaccessible.c:62 gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "复制(_C)" ++msgstr "复制" + + #: gtk/a11y/gtkimageaccessible.c:63 gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "Cu_t" +-msgstr "剪切(_T)" ++msgstr "剪切" + + #: gtk/a11y/gtkimageaccessible.c:64 gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "删除(_D)" ++msgstr "删除" + + #: gtk/a11y/gtkimageaccessible.c:65 gtk/deprecated/gtkstock.c:339 + msgctxt "Stock label" +@@ -727,95 +727,95 @@ + #: gtk/a11y/gtkimageaccessible.c:69 gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "执行(_E)" ++msgstr "执行" + + #: gtk/a11y/gtkimageaccessible.c:70 gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_File" +-msgstr "文件(_F)" ++msgstr "文件" + + #: gtk/a11y/gtkimageaccessible.c:71 gtk/deprecated/gtkstock.c:363 + msgctxt "Stock label" + msgid "_Find" +-msgstr "查找(_F)" ++msgstr "查找" + + #: gtk/a11y/gtkimageaccessible.c:72 gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "查找并替换(_R)" ++msgstr "查找并替换" + + #: gtk/a11y/gtkimageaccessible.c:73 gtk/deprecated/gtkstock.c:365 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "软盘(_F)" ++msgstr "软盘" + + #: gtk/a11y/gtkimageaccessible.c:74 gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "全屏(_F)" ++msgstr "全屏" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/a11y/gtkimageaccessible.c:75 gtk/deprecated/gtkstock.c:369 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "到底部(_B)" ++msgstr "到底部" + + #. This is a navigation label as in "go to the first page" + #: gtk/a11y/gtkimageaccessible.c:76 gtk/deprecated/gtkstock.c:371 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "到第一页(_F)" ++msgstr "到第一页" + + #. This is a navigation label as in "go to the last page" + #: gtk/a11y/gtkimageaccessible.c:77 gtk/deprecated/gtkstock.c:373 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "到最后一页(_L)" ++msgstr "到最后一页" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/a11y/gtkimageaccessible.c:78 gtk/deprecated/gtkstock.c:375 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "到顶部(_T)" ++msgstr "到顶部" + + #. This is a navigation label as in "go back" + #: gtk/a11y/gtkimageaccessible.c:79 gtk/deprecated/gtkstock.c:377 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "后退(_B)" ++msgstr "后退" + + #. This is a navigation label as in "go down" + #: gtk/a11y/gtkimageaccessible.c:80 gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "向下(_D)" ++msgstr "向下" + + #. This is a navigation label as in "go forward" + #: gtk/a11y/gtkimageaccessible.c:81 gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "前进(_F)" ++msgstr "前进" + + #. This is a navigation label as in "go up" + #: gtk/a11y/gtkimageaccessible.c:82 gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "向上(_U)" ++msgstr "向上" + + #: gtk/a11y/gtkimageaccessible.c:83 gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "硬盘(_H)" ++msgstr "硬盘" + + #: gtk/a11y/gtkimageaccessible.c:84 gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Help" +-msgstr "帮助(_H)" ++msgstr "帮助" + + #: gtk/a11y/gtkimageaccessible.c:85 gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Home" +-msgstr "主文件夹(_H)" ++msgstr "主文件夹" + + #: gtk/a11y/gtkimageaccessible.c:86 gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" +@@ -825,203 +825,203 @@ + #: gtk/a11y/gtkimageaccessible.c:87 gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "斜体(_I)" ++msgstr "斜体" + + #: gtk/a11y/gtkimageaccessible.c:88 gtk/deprecated/gtkstock.c:392 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "跳至(_J)" ++msgstr "跳至" + + #. This is about text justification, "centered text" + #: gtk/a11y/gtkimageaccessible.c:89 gtk/deprecated/gtkstock.c:394 + msgctxt "Stock label" + msgid "_Center" +-msgstr "居中(_C)" ++msgstr "居中" + + #. This is about text justification + #: gtk/a11y/gtkimageaccessible.c:90 gtk/deprecated/gtkstock.c:396 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "两端对齐(_F)" ++msgstr "两端对齐" + + #. This is about text justification, "left-justified text" + #: gtk/a11y/gtkimageaccessible.c:91 gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label" + msgid "_Left" +-msgstr "左对齐(_L)" ++msgstr "左对齐" + + #. This is about text justification, "right-justified text" + #: gtk/a11y/gtkimageaccessible.c:92 gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label" + msgid "_Right" +-msgstr "右对齐(_R)" ++msgstr "右对齐" + + #: gtk/a11y/gtkimageaccessible.c:93 gtk/deprecated/gtkstock.c:367 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "离开全屏(_L)" ++msgstr "离开全屏" + + #. Media label, as in "fast forward" + #: gtk/a11y/gtkimageaccessible.c:94 gtk/deprecated/gtkstock.c:403 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "前进(_F)" ++msgstr "前进" + + #. Media label, as in "next song" + #: gtk/a11y/gtkimageaccessible.c:95 gtk/deprecated/gtkstock.c:405 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "下首(_N)" ++msgstr "下首" + + #. Media label, as in "pause music" + #: gtk/a11y/gtkimageaccessible.c:96 gtk/deprecated/gtkstock.c:407 + msgctxt "Stock label, media" + msgid "P_ause" +-msgstr "暂停(_A)" ++msgstr "暂停" + + #. Media label, as in "play music" + #: gtk/a11y/gtkimageaccessible.c:97 gtk/deprecated/gtkstock.c:409 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "播放(_P)" ++msgstr "播放" + + #. Media label, as in "previous song" + #: gtk/a11y/gtkimageaccessible.c:98 gtk/deprecated/gtkstock.c:411 + msgctxt "Stock label, media" + msgid "Pre_vious" +-msgstr "上首(_V)" ++msgstr "上首" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:99 gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "录制(_R)" ++msgstr "录制" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:100 gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label, media" + msgid "R_ewind" +-msgstr "快退(_E)" ++msgstr "快退" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:101 gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #: gtk/a11y/gtkimageaccessible.c:102 gtk/deprecated/gtkstock.c:418 + msgctxt "Stock label" + msgid "_Network" +-msgstr "网络(_N)" ++msgstr "网络" + + #: gtk/a11y/gtkimageaccessible.c:103 gtk/deprecated/gtkstock.c:419 + msgctxt "Stock label" + msgid "_New" +-msgstr "新建(_N)" ++msgstr "新建" + + #: gtk/a11y/gtkimageaccessible.c:104 gtk/deprecated/gtkstock.c:422 + msgctxt "Stock label" + msgid "_Open" +-msgstr "打开(_O)" ++msgstr "打开" + + #: gtk/a11y/gtkimageaccessible.c:105 gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "粘贴(_P)" ++msgstr "粘贴" + + #: gtk/a11y/gtkimageaccessible.c:106 gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Print" +-msgstr "打印(_P)" ++msgstr "打印" + + #: gtk/a11y/gtkimageaccessible.c:107 gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "Print Pre_view" +-msgstr "打印预览(_V)" ++msgstr "打印预览" + + #: gtk/a11y/gtkimageaccessible.c:108 gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "属性(_P)" ++msgstr "属性" + + #: gtk/a11y/gtkimageaccessible.c:109 gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "退出(_Q)" ++msgstr "退出" + + #: gtk/a11y/gtkimageaccessible.c:110 gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "重做(_R)" ++msgstr "重做" + + #: gtk/a11y/gtkimageaccessible.c:111 gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "刷新(_R)" ++msgstr "刷新" + + #: gtk/a11y/gtkimageaccessible.c:112 gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "移除(_R)" ++msgstr "移除" + + #: gtk/a11y/gtkimageaccessible.c:113 gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "还原(_R)" ++msgstr "还原" + + #: gtk/a11y/gtkimageaccessible.c:114 gtk/deprecated/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Save" +-msgstr "保存(_S)" ++msgstr "保存" + + #: gtk/a11y/gtkimageaccessible.c:115 gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "另存为(_A)" ++msgstr "另存为" + + #: gtk/a11y/gtkimageaccessible.c:116 gtk/deprecated/gtkstock.c:444 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "全选(_A)" ++msgstr "全选" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:117 gtk/deprecated/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "升序(_A)" ++msgstr "升序" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:118 gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "降序(_D)" ++msgstr "降序" + + #: gtk/a11y/gtkimageaccessible.c:119 gtk/deprecated/gtkstock.c:451 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "拼写检查(_S)" ++msgstr "拼写检查" + + #: gtk/a11y/gtkimageaccessible.c:120 gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:121 gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "删除线(_S)" ++msgstr "删除线" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:122 gtk/deprecated/gtkstock.c:457 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "下划线(_U)" ++msgstr "下划线" + + #: gtk/a11y/gtkimageaccessible.c:123 gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "撤消(_U)" ++msgstr "撤消" + + #: gtk/a11y/gtkimageaccessible.c:124 gtk/deprecated/gtkstock.c:388 + msgctxt "Stock label" +@@ -1032,23 +1032,23 @@ + #: gtk/a11y/gtkimageaccessible.c:125 gtk/deprecated/gtkstock.c:461 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "普通大小(_N)" ++msgstr "普通大小" + + #. Zoom + #: gtk/a11y/gtkimageaccessible.c:126 gtk/deprecated/gtkstock.c:463 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "最适合(_F)" ++msgstr "最适合" + + #: gtk/a11y/gtkimageaccessible.c:127 gtk/deprecated/gtkstock.c:464 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "放大(_I)" ++msgstr "放大" + + #: gtk/a11y/gtkimageaccessible.c:128 gtk/deprecated/gtkstock.c:465 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "缩小(_O)" ++msgstr "缩小" + + #: gtk/a11y/gtkmenubuttonaccessible.c:102 gtk/inspector/window.ui:459 + msgid "Menu" +@@ -1107,7 +1107,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "色调(_H):" ++msgstr "色调:" + + #: gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -1115,7 +1115,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:464 + msgid "S_aturation:" +-msgstr "饱和度(_A):" ++msgstr "饱和度:" + + #: gtk/deprecated/gtkcolorsel.c:465 + msgid "Intensity of the color." +@@ -1123,7 +1123,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "值(_V):" ++msgstr "值:" + + #: gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -1131,7 +1131,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "红(_R):" ++msgstr "红:" + + #: gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -1139,7 +1139,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "绿(_G):" ++msgstr "绿:" + + #: gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -1147,7 +1147,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "蓝(_B):" ++msgstr "蓝:" + + #: gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -1155,7 +1155,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:476 + msgid "Op_acity:" +-msgstr "透明度(_A):" ++msgstr "透明度:" + + #: gtk/deprecated/gtkcolorsel.c:484 gtk/deprecated/gtkcolorsel.c:494 + msgid "Transparency of the color." +@@ -1163,7 +1163,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:501 + msgid "Color _name:" +-msgstr "颜色名称(_N):" ++msgstr "颜色名称:" + + #: gtk/deprecated/gtkcolorsel.c:516 + msgid "" +@@ -1174,7 +1174,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "调色板(_P):" ++msgstr "调色板:" + + #: gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -1207,7 +1207,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:1458 + msgid "_Save color here" +-msgstr "在此保存颜色(_S)" ++msgstr "在此保存颜色" + + #: gtk/deprecated/gtkcolorsel.c:1664 + msgid "" +@@ -1228,17 +1228,17 @@ + #: gtk/ui/gtkappchooserdialog.ui:61 gtk/ui/gtkassistant.ui:125 + #: gtk/ui/gtkcolorchooserdialog.ui:34 gtk/ui/gtkfontchooserdialog.ui:31 + msgid "_Cancel" +-msgstr "取消(_C)" ++msgstr "取消" + + #: gtk/deprecated/gtkcolorseldialog.c:195 gtk/gtkprinteroptionwidget.c:546 + #: gtk/ui/gtkappchooserdialog.ui:67 gtk/ui/gtkcolorchooserdialog.ui:40 + #: gtk/ui/gtkfontchooserdialog.ui:37 + msgid "_Select" +-msgstr "选择(_S)" ++msgstr "选择" + + #: gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "帮助(_H)" ++msgstr "帮助" + + #: gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1252,30 +1252,30 @@ + + #: gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "字体族(_F):" ++msgstr "字体族:" + + #: gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "样式(_S):" ++msgstr "样式:" + + #: gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +-msgstr "大小(_Z):" ++msgstr "大小:" + + #. create the text entry widget + #: gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "预览(_P):" ++msgstr "预览:" + + #: gtk/deprecated/gtkfontsel.c:1693 gtk/gtkpagesetupunixdialog.c:198 + #: gtk/ui/gtkassistant.ui:50 + msgid "_Apply" +-msgstr "应用(_A)" ++msgstr "应用" + + #: gtk/deprecated/gtkfontsel.c:1698 gtk/gtkmessagedialog.c:944 + #: gtk/gtkmessagedialog.c:966 gtk/gtkprintbackend.c:780 gtk/gtkwindow.c:12791 + msgid "_OK" +-msgstr "确定(_O)" ++msgstr "确定" + + #: gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1293,57 +1293,57 @@ + #: gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "应用(_A)" ++msgstr "应用" + + #: gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "取消(_C)" ++msgstr "取消" + + #: gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "C_onnect" +-msgstr "连接(_O)" ++msgstr "连接" + + #: gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "转换(_C)" ++msgstr "转换" + + #: gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "放弃(_D)" ++msgstr "放弃" + + #: gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "断开连接(_D)" ++msgstr "断开连接" + + #: gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "编辑(_E)" ++msgstr "编辑" + + #: gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Index" +-msgstr "索引(_I)" ++msgstr "索引" + + #: gtk/deprecated/gtkstock.c:390 + msgctxt "Stock label" + msgid "_Information" +-msgstr "信息(_I)" ++msgstr "信息" + + #: gtk/deprecated/gtkstock.c:420 + msgctxt "Stock label" + msgid "_No" +-msgstr "否(_N)" ++msgstr "否" + + #: gtk/deprecated/gtkstock.c:421 + msgctxt "Stock label" + msgid "_OK" +-msgstr "确定(_O)" ++msgstr "确定" + + #. Page orientation + #: gtk/deprecated/gtkstock.c:424 +@@ -1372,32 +1372,32 @@ + #: gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "Page Set_up" +-msgstr "页面设置(_U)" ++msgstr "页面设置" + + #: gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "首选项(_P)" ++msgstr "首选项" + + #: gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Color" +-msgstr "颜色(_C)" ++msgstr "颜色" + + #: gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Font" +-msgstr "字体(_F)" ++msgstr "字体" + + #: gtk/deprecated/gtkstock.c:455 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "取消删除(_U)" ++msgstr "取消删除" + + #: gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "是(_Y)" ++msgstr "是" + + #: gtk/deprecated/gtkuimanager.c:1782 + #, c-format +@@ -1511,16 +1511,16 @@ + + #: gtk/gtkaboutdialog.c:703 + msgid "C_redits" +-msgstr "鸣谢(_R)" ++msgstr "鸣谢" + + #: gtk/gtkaboutdialog.c:711 + msgid "_License" +-msgstr "许可(_L)" ++msgstr "许可" + + #: gtk/gtkaboutdialog.c:720 gtk/gtkcustompaperunixdialog.c:329 + #: gtk/gtkmessagedialog.c:948 gtk/ui/gtkassistant.ui:144 + msgid "_Close" +-msgstr "关闭(_C)" ++msgstr "关闭" + + #: gtk/gtkaboutdialog.c:1004 + msgid "Could not show link" +@@ -2181,7 +2181,7 @@ + + #: gtk/gtkcolorswatch.c:360 + msgid "C_ustomize" +-msgstr "自定义(_U)" ++msgstr "自定义" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2217,11 +2217,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "宽度(_W):" ++msgstr "宽度:" + + #: gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "高度(_H):" ++msgstr "高度:" + + #: gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2229,19 +2229,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "上(_T):" ++msgstr "上:" + + #: gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "下(_B):" ++msgstr "下:" + + #: gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "左(_L):" ++msgstr "左:" + + #: gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "右(_R):" ++msgstr "右:" + + #: gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2249,28 +2249,28 @@ + + #: gtk/gtkentry.c:9591 gtk/gtklabel.c:6687 gtk/gtktextview.c:9525 + msgid "Cu_t" +-msgstr "剪切(_T)" ++msgstr "剪切" + + #: gtk/gtkentry.c:9595 gtk/gtklabel.c:6688 gtk/gtktextview.c:9529 + msgid "_Copy" +-msgstr "复制(_C)" ++msgstr "复制" + + #: gtk/gtkentry.c:9599 gtk/gtklabel.c:6689 gtk/gtktextview.c:9531 + msgid "_Paste" +-msgstr "粘贴(_P)" ++msgstr "粘贴" + + #: gtk/gtkentry.c:9602 gtk/gtkfilechooserwidget.c:1500 + #: gtk/gtkfilechooserwidget.c:2335 gtk/gtklabel.c:6691 gtk/gtktextview.c:9534 + msgid "_Delete" +-msgstr "删除(_D)" ++msgstr "删除" + + #: gtk/gtkentry.c:9613 gtk/gtklabel.c:6700 gtk/gtktextview.c:9548 + msgid "Select _All" +-msgstr "全选(_A)" ++msgstr "全选" + + #: gtk/gtkentry.c:9623 gtk/gtktextview.c:9558 + msgid "Insert _Emoji" +-msgstr "插入表情符号(_E)" ++msgstr "插入表情符号" + + #: gtk/gtkentry.c:9799 gtk/gtktextview.c:9782 + msgid "Select all" +@@ -2314,18 +2314,18 @@ + + #: gtk/gtkfilechooserdialog.c:542 + msgid "_Name" +-msgstr "名称(_N)" ++msgstr "名称" + + #. Open item is always present + #: gtk/gtkfilechoosernative.c:546 gtk/gtkfilechoosernative.c:631 + #: gtk/gtkplacessidebar.c:3628 gtk/gtkplacessidebar.c:3696 + #: gtk/gtkplacesview.c:1705 + msgid "_Open" +-msgstr "打开(_O)" ++msgstr "打开" + + #: gtk/gtkfilechoosernative.c:631 gtk/inspector/css-editor.c:202 + msgid "_Save" +-msgstr "保存(_S)" ++msgstr "保存" + + #: gtk/gtkfilechoosernativequartz.c:331 gtk/ui/gtkfilechooserwidget.ui:435 + msgid "Select which types of files are shown" +@@ -2474,48 +2474,48 @@ + + #: gtk/gtkfilechooserwidget.c:2330 + msgid "_Visit File" +-msgstr "访问文件(_V)" ++msgstr "访问文件" + + #: gtk/gtkfilechooserwidget.c:2331 + msgid "_Open With File Manager" +-msgstr "以文件管理器打开(_O)" ++msgstr "以文件管理器打开" + + #: gtk/gtkfilechooserwidget.c:2332 + msgid "_Copy Location" +-msgstr "复制位置(_C)" ++msgstr "复制位置" + + #: gtk/gtkfilechooserwidget.c:2333 + msgid "_Add to Bookmarks" +-msgstr "添加到书签(_A)" ++msgstr "添加到书签" + + #: gtk/gtkfilechooserwidget.c:2334 gtk/gtkplacessidebar.c:2744 + #: gtk/ui/gtkfilechooserwidget.ui:569 + msgid "_Rename" +-msgstr "重命名(_R)" ++msgstr "重命名" + + #: gtk/gtkfilechooserwidget.c:2336 + msgid "_Move to Trash" +-msgstr "移动到回收站(_M)" ++msgstr "移动到回收站" + + #: gtk/gtkfilechooserwidget.c:2340 + msgid "Show _Hidden Files" +-msgstr "显示隐藏文件(_H)" ++msgstr "显示隐藏文件" + + #: gtk/gtkfilechooserwidget.c:2341 + msgid "Show _Size Column" +-msgstr "显示大小列(_S)" ++msgstr "显示大小列" + + #: gtk/gtkfilechooserwidget.c:2342 + msgid "Show T_ype Column" +-msgstr "显示类型列(_Y)" ++msgstr "显示类型列" + + #: gtk/gtkfilechooserwidget.c:2343 + msgid "Show _Time" +-msgstr "显示时间(_T)" ++msgstr "显示时间" + + #: gtk/gtkfilechooserwidget.c:2344 + msgid "Sort _Folders before Files" +-msgstr "文件夹列在文件前(_F)" ++msgstr "文件夹列在文件前" + + #. this is the header for the location column in the print dialog + #: gtk/gtkfilechooserwidget.c:2626 gtk/inspector/css-node-tree.ui:141 +@@ -2526,7 +2526,7 @@ + #. Label + #: gtk/gtkfilechooserwidget.c:2719 + msgid "_Name:" +-msgstr "名称(_N):" ++msgstr "名称:" + + #: gtk/gtkfilechooserwidget.c:3344 gtk/gtkfilechooserwidget.c:3358 + #, c-format +@@ -2658,7 +2658,7 @@ + + #: gtk/gtkfilechooserwidget.c:6574 gtk/gtkprintunixdialog.c:677 + msgid "_Replace" +-msgstr "替换(_R)" ++msgstr "替换" + + #: gtk/gtkfilechooserwidget.c:6793 + msgid "You do not have access to the specified folder." +@@ -2807,12 +2807,12 @@ + #. Open Link + #: gtk/gtklabel.c:6668 + msgid "_Open Link" +-msgstr "打开链接(_O)" ++msgstr "打开链接" + + #. Copy Link Address + #: gtk/gtklabel.c:6677 + msgid "Copy _Link Address" +-msgstr "复制链接地址(_L)" ++msgstr "复制链接地址" + + #: gtk/gtk-launch.c:42 + msgid "Show program version" +@@ -2957,15 +2957,15 @@ + + #: gtk/gtkmessagedialog.c:956 + msgid "_No" +-msgstr "否(_N)" ++msgstr "否" + + #: gtk/gtkmessagedialog.c:957 + msgid "_Yes" +-msgstr "是(_Y)" ++msgstr "是" + + #: gtk/gtkmountoperation.c:595 + msgid "Co_nnect" +-msgstr "连接(_N)" ++msgstr "连接" + + #: gtk/gtkmountoperation.c:668 + msgid "Connect As" +@@ -2973,19 +2973,19 @@ + + #: gtk/gtkmountoperation.c:677 + msgid "_Anonymous" +-msgstr "匿名(_A)" ++msgstr "匿名" + + #: gtk/gtkmountoperation.c:686 + msgid "Registered U_ser" +-msgstr "已注册用户(_S)" ++msgstr "已注册用户" + + #: gtk/gtkmountoperation.c:697 + msgid "_Username" +-msgstr "用户名(_U)" ++msgstr "用户名" + + #: gtk/gtkmountoperation.c:702 + msgid "_Domain" +-msgstr "域(_D)" ++msgstr "域" + + #: gtk/gtkmountoperation.c:711 + msgid "Volume type" +@@ -2993,11 +2993,11 @@ + + #: gtk/gtkmountoperation.c:721 + msgid "_Hidden" +-msgstr "隐藏(_H)" ++msgstr "隐藏" + + #: gtk/gtkmountoperation.c:724 + msgid "_Windows system" +-msgstr "窗口系统(_W)" ++msgstr "窗口系统" + + #: gtk/gtkmountoperation.c:727 + msgid "_PIM" +@@ -3005,19 +3005,19 @@ + + #: gtk/gtkmountoperation.c:733 + msgid "_Password" +-msgstr "密码(_P)" ++msgstr "密码" + + #: gtk/gtkmountoperation.c:755 + msgid "Forget password _immediately" +-msgstr "立即忘记密码(_I)" ++msgstr "立即忘记密码" + + #: gtk/gtkmountoperation.c:765 + msgid "Remember password until you _logout" +-msgstr "记到注销之前(_L)" ++msgstr "记到注销之前" + + #: gtk/gtkmountoperation.c:775 + msgid "Remember _forever" +-msgstr "永远记住(_F)" ++msgstr "永远记住" + + #: gtk/gtkmountoperation.c:1170 + #, c-format +@@ -3031,7 +3031,7 @@ + + #: gtk/gtkmountoperation.c:1389 + msgid "_End Process" +-msgstr "结束进程(_E)" ++msgstr "结束进程" + + #: gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -3193,45 +3193,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: gtk/gtkplacessidebar.c:2337 gtk/gtkplacessidebar.c:3716 + msgid "_Start" +-msgstr "开始(_S)" ++msgstr "开始" + + #: gtk/gtkplacessidebar.c:2338 gtk/gtkplacessidebar.c:3717 + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: gtk/gtkplacessidebar.c:2345 + msgid "_Power On" +-msgstr "电源开(_P)" ++msgstr "电源开" + + #: gtk/gtkplacessidebar.c:2346 + msgid "_Safely Remove Drive" +-msgstr "安全移除驱动器(_S)" ++msgstr "安全移除驱动器" + + #: gtk/gtkplacessidebar.c:2350 + msgid "_Connect Drive" +-msgstr "连接驱动器(_C)" ++msgstr "连接驱动器" + + #: gtk/gtkplacessidebar.c:2351 + msgid "_Disconnect Drive" +-msgstr "断开驱动器(_D)" ++msgstr "断开驱动器" + + #: gtk/gtkplacessidebar.c:2355 + msgid "_Start Multi-disk Device" +-msgstr "启动多盘设备(_S)" ++msgstr "启动多盘设备" + + #: gtk/gtkplacessidebar.c:2356 + msgid "_Stop Multi-disk Device" +-msgstr "停止多盘设备(_S)" ++msgstr "停止多盘设备" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: gtk/gtkplacessidebar.c:2361 + msgid "_Unlock Device" +-msgstr "解锁设备(_U)" ++msgstr "解锁设备" + + #: gtk/gtkplacessidebar.c:2362 + msgid "_Lock Device" +-msgstr "锁定设备(_L)" ++msgstr "锁定设备" + + #: gtk/gtkplacessidebar.c:2400 gtk/gtkplacessidebar.c:3397 + #, c-format +@@ -3286,20 +3286,20 @@ + #: gtk/gtkplacessidebar.c:3633 gtk/gtkplacessidebar.c:3699 + #: gtk/gtkplacesview.c:1715 + msgid "Open in New _Tab" +-msgstr "在新标签页中打开(_T)" ++msgstr "在新标签页中打开" + + #: gtk/gtkplacessidebar.c:3639 gtk/gtkplacessidebar.c:3702 + #: gtk/gtkplacesview.c:1726 + msgid "Open in New _Window" +-msgstr "在新窗口中打开(_W)" ++msgstr "在新窗口中打开" + + #: gtk/gtkplacessidebar.c:3706 + msgid "_Add Bookmark" +-msgstr "添加到书签(_A)" ++msgstr "添加到书签" + + #: gtk/gtkplacessidebar.c:3707 + msgid "_Remove" +-msgstr "移除(_R)" ++msgstr "移除" + + #: gtk/gtkplacessidebar.c:3708 + msgid "Rename…" +@@ -3307,19 +3307,19 @@ + + #: gtk/gtkplacessidebar.c:3712 gtk/gtkplacesview.c:1760 + msgid "_Mount" +-msgstr "挂载(_M)" ++msgstr "挂载" + + #: gtk/gtkplacessidebar.c:3713 gtk/gtkplacesview.c:1750 + msgid "_Unmount" +-msgstr "卸载(_U)" ++msgstr "卸载" + + #: gtk/gtkplacessidebar.c:3714 + msgid "_Eject" +-msgstr "弹出(_E)" ++msgstr "弹出" + + #: gtk/gtkplacessidebar.c:3715 + msgid "_Detect Media" +-msgstr "检测介质(_D)" ++msgstr "检测介质" + + #: gtk/gtkplacessidebar.c:4161 gtk/gtkplacesview.c:1122 + msgid "Computer" +@@ -3341,7 +3341,7 @@ + #. Restore from Cancel to Connect + #: gtk/gtkplacesview.c:1250 gtk/ui/gtkplacesview.ui:317 + msgid "Con_nect" +-msgstr "连接(_N)" ++msgstr "连接" + + #. if it wasn't cancelled show a dialog + #: gtk/gtkplacesview.c:1393 +@@ -3351,7 +3351,7 @@ + #. Allow to cancel the operation + #: gtk/gtkplacesview.c:1494 + msgid "Cance_l" +-msgstr "取消(_L)" ++msgstr "取消" + + #: gtk/gtkplacesview.c:1657 + msgid "AppleTalk" +@@ -3394,11 +3394,11 @@ + + #: gtk/gtkplacesview.c:1750 + msgid "_Disconnect" +-msgstr "断开连接(_D)" ++msgstr "断开连接" + + #: gtk/gtkplacesview.c:1760 + msgid "_Connect" +-msgstr "连接(_C)" ++msgstr "连接" + + #: gtk/gtkplacesview.c:1901 + msgid "Unable to get remote server location" +@@ -3437,7 +3437,7 @@ + + #: gtk/gtkprintbackend.c:849 + msgid "_Remember password" +-msgstr "记住密码(_R)" ++msgstr "记住密码" + + #: gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3589,11 +3589,11 @@ + + #: gtk/gtkprintunixdialog.c:746 + msgid "Pre_view" +-msgstr "预览(_V)" ++msgstr "预览" + + #: gtk/gtkprintunixdialog.c:748 + msgid "_Print" +-msgstr "打印(_P)" ++msgstr "打印" + + #: gtk/gtkprintunixdialog.c:861 + msgid "Getting printer information failed" +@@ -3694,19 +3694,19 @@ + + #: gtk/gtkrecentchooserdefault.c:1689 + msgid "Copy _Location" +-msgstr "复制位置(_L)" ++msgstr "复制位置" + + #: gtk/gtkrecentchooserdefault.c:1700 + msgid "_Remove From List" +-msgstr "从列表中删除(_R)" ++msgstr "从列表中删除" + + #: gtk/gtkrecentchooserdefault.c:1707 + msgid "_Clear List" +-msgstr "清除列表(_C)" ++msgstr "清除列表" + + #: gtk/gtkrecentchooserdefault.c:1719 + msgid "Show _Private Resources" +-msgstr "显示私有资源(_P)" ++msgstr "显示私有资源" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3799,7 +3799,7 @@ + + #: gtk/gtkshortcutssection.c:451 + msgid "_Show All" +-msgstr "显示全部(_S)" ++msgstr "显示全部" + + #: gtk/gtkshortcutsshortcut.c:136 + msgid "Two finger pinch" +@@ -3963,43 +3963,43 @@ + + #: gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM 从左至右记号(_L)" ++msgstr "LRM 从左至右记号" + + #: gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM 从右至左记号(_R)" ++msgstr "RLM 从右至左记号" + + #: gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +-msgstr "LRE 从左至右嵌入(_E)" ++msgstr "LRE 从左至右嵌入" + + #: gtk/gtktextutil.c:60 + msgid "RLE Right-to-left e_mbedding" +-msgstr "RLE 从右至左嵌入(_M)" ++msgstr "RLE 从右至左嵌入" + + #: gtk/gtktextutil.c:61 + msgid "LRO Left-to-right _override" +-msgstr "LRO 从左至右覆盖(_O)" ++msgstr "LRO 从左至右覆盖" + + #: gtk/gtktextutil.c:62 + msgid "RLO Right-to-left o_verride" +-msgstr "RLO 从右至左覆盖(_V)" ++msgstr "RLO 从右至左覆盖" + + #: gtk/gtktextutil.c:63 + msgid "PDF _Pop directional formatting" +-msgstr "PDF 弹出方向格式化(_P)" ++msgstr "PDF 弹出方向格式化" + + #: gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS 零宽度空格(_Z)" ++msgstr "ZWS 零宽度空格" + + #: gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +-msgstr "ZWJ 零宽度接合(_J)" ++msgstr "ZWJ 零宽度接合" + + #: gtk/gtktextutil.c:66 + msgid "ZWNJ Zero width _non-joiner" +-msgstr "ZWNJ 零宽度非接合(_N)" ++msgstr "ZWNJ 零宽度非接合" + + #: gtk/gtkvolumebutton.c:189 + msgid "Adjusts the volume" +@@ -7066,11 +7066,11 @@ + + #: gtk/ui/gtkappchooserdialog.ui:78 + msgid "_View All Applications" +-msgstr "查看所有应用程序(_V)" ++msgstr "查看所有应用程序" + + #: gtk/ui/gtkappchooserdialog.ui:86 + msgid "_Find New Applications" +-msgstr "寻找新应用程序(_F)" ++msgstr "寻找新应用程序" + + #: gtk/ui/gtkappchooserwidget.ui:119 + msgid "No applications found." +@@ -7110,15 +7110,15 @@ + + #: gtk/ui/gtkassistant.ui:68 + msgid "_Next" +-msgstr "前进(_N)" ++msgstr "前进" + + #: gtk/ui/gtkassistant.ui:88 + msgid "_Back" +-msgstr "后退(_B)" ++msgstr "后退" + + #: gtk/ui/gtkassistant.ui:107 + msgid "_Finish" +-msgstr "完成(_F)" ++msgstr "完成" + + #: gtk/ui/gtkcolorchooserdialog.ui:6 + msgid "Select a Color" +@@ -7243,7 +7243,7 @@ + + #: gtk/ui/gtkfilechooserwidget.ui:504 + msgid "_Create" +-msgstr "创建(_C)" ++msgstr "创建" + + #: gtk/ui/gtkfontchooserdialog.ui:6 + msgid "Select Font" +@@ -7267,15 +7267,15 @@ + + #: gtk/ui/gtkpagesetupunixdialog.ui:47 + msgid "_Format for:" +-msgstr "格式(_F):" ++msgstr "格式:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:80 gtk/ui/gtkprintunixdialog.ui:747 + msgid "_Paper size:" +-msgstr "纸张大小(_P):" ++msgstr "纸张大小:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:122 + msgid "_Orientation:" +-msgstr "方向(_O):" ++msgstr "方向:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:152 gtk/ui/gtkprintunixdialog.ui:794 + msgid "Portrait" +@@ -7330,7 +7330,7 @@ + + #: gtk/ui/gtkplacesview.ui:307 + msgid "Connect to _Server" +-msgstr "连接到服务器(_S)" ++msgstr "连接到服务器" + + # 原文已经是正确省略号了,那么不需要舍近求远用三点。 + #: gtk/ui/gtkplacesview.ui:340 +@@ -7352,19 +7352,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:201 + msgid "_All Pages" +-msgstr "所有页面(_A)" ++msgstr "所有页面" + + #: gtk/ui/gtkprintunixdialog.ui:216 + msgid "C_urrent Page" +-msgstr "当前页(_U)" ++msgstr "当前页" + + #: gtk/ui/gtkprintunixdialog.ui:233 + msgid "Se_lection" +-msgstr "选择(_L)" ++msgstr "选择" + + #: gtk/ui/gtkprintunixdialog.ui:249 + msgid "Pag_es:" +-msgstr "页面(_E):" ++msgstr "页面:" + + #: gtk/ui/gtkprintunixdialog.ui:252 gtk/ui/gtkprintunixdialog.ui:270 + #: gtk/ui/gtkprintunixdialog.ui:277 +@@ -7385,15 +7385,15 @@ + + #: gtk/ui/gtkprintunixdialog.ui:334 + msgid "Copie_s:" +-msgstr "副本数(_S):" ++msgstr "副本数:" + + #: gtk/ui/gtkprintunixdialog.ui:361 + msgid "C_ollate" +-msgstr "逐份(_O)" ++msgstr "逐份" + + #: gtk/ui/gtkprintunixdialog.ui:375 + msgid "_Reverse" +-msgstr "逆序(_R)" ++msgstr "逆序" + + #: gtk/ui/gtkprintunixdialog.ui:452 + msgid "Layout" +@@ -7401,19 +7401,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:475 + msgid "T_wo-sided:" +-msgstr "双面(_W):" ++msgstr "双面:" + + #: gtk/ui/gtkprintunixdialog.ui:500 + msgid "Pages per _side:" +-msgstr "每面页数(_S):" ++msgstr "每面页数:" + + #: gtk/ui/gtkprintunixdialog.ui:527 + msgid "Page or_dering:" +-msgstr "页面顺序(_D):" ++msgstr "页面顺序:" + + #: gtk/ui/gtkprintunixdialog.ui:553 + msgid "_Only print:" +-msgstr "打印(_O):" ++msgstr "打印:" + + #: gtk/ui/gtkprintunixdialog.ui:570 + msgid "All sheets" +@@ -7429,7 +7429,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:585 + msgid "Sc_ale:" +-msgstr "缩放(_A):" ++msgstr "缩放:" + + #: gtk/ui/gtkprintunixdialog.ui:649 + msgid "Paper" +@@ -7437,19 +7437,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:672 + msgid "Paper _type:" +-msgstr "纸张类型(_T):" ++msgstr "纸张类型:" + + #: gtk/ui/gtkprintunixdialog.ui:697 + msgid "Paper _source:" +-msgstr "纸张来源(_S):" ++msgstr "纸张来源:" + + #: gtk/ui/gtkprintunixdialog.ui:722 + msgid "Output t_ray:" +-msgstr "出纸器(_R):" ++msgstr "出纸器:" + + #: gtk/ui/gtkprintunixdialog.ui:776 + msgid "Or_ientation:" +-msgstr "方向(_I):" ++msgstr "方向:" + + #: gtk/ui/gtkprintunixdialog.ui:876 + msgid "Job Details" +@@ -7457,11 +7457,11 @@ + + #: gtk/ui/gtkprintunixdialog.ui:899 + msgid "Pri_ority:" +-msgstr "优先级(_O):" ++msgstr "优先级:" + + #: gtk/ui/gtkprintunixdialog.ui:923 + msgid "_Billing info:" +-msgstr "计费信息(_B):" ++msgstr "计费信息:" + + #: gtk/ui/gtkprintunixdialog.ui:967 + msgid "Print Document" +@@ -7470,12 +7470,12 @@ + #. this is one of the choices for the print at option in the print dialog + #: gtk/ui/gtkprintunixdialog.ui:987 + msgid "_Now" +-msgstr "立即(_N)" ++msgstr "立即" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: gtk/ui/gtkprintunixdialog.ui:1003 + msgid "A_t:" +-msgstr "于(_T):" ++msgstr "于:" + + #. Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported. + #: gtk/ui/gtkprintunixdialog.ui:1007 gtk/ui/gtkprintunixdialog.ui:1009 +@@ -7495,7 +7495,7 @@ + #. this is one of the choices for the print at option in the print dialog. It means that the print job will not be printed until it explicitly gets 'released'. + #: gtk/ui/gtkprintunixdialog.ui:1050 + msgid "On _hold" +-msgstr "等待(_H)" ++msgstr "等待" + + #: gtk/ui/gtkprintunixdialog.ui:1054 gtk/ui/gtkprintunixdialog.ui:1055 + msgid "Hold the job until it is explicitly released" +@@ -7508,12 +7508,12 @@ + #. this is the label used for the option in the print dialog that controls the front cover page. + #: gtk/ui/gtkprintunixdialog.ui:1115 + msgid "Be_fore:" +-msgstr "封面(_F):" ++msgstr "封面:" + + #. this is the label used for the option in the print dialog that controls the back cover page. + #: gtk/ui/gtkprintunixdialog.ui:1139 + msgid "_After:" +-msgstr "封底(_A):" ++msgstr "封底:" + + #: gtk/ui/gtkprintunixdialog.ui:1181 + msgid "Job" +@@ -8317,7 +8317,7 @@ + #: modules/printbackends/file/gtkprintbackendfile.c:676 + #: modules/printbackends/test/gtkprintbackendtest.c:501 + msgid "Pages per _sheet:" +-msgstr "每张页数(_S):" ++msgstr "每张页数:" + + #: modules/printbackends/file/gtkprintbackendfile.c:735 + msgid "File" +@@ -8325,7 +8325,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "输出格式(_O)" ++msgstr "输出格式" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:394 + msgid "Print to LPR" +@@ -8961,7 +8961,7 @@ + #~ msgstr "显示文本" + + #~ msgid "_Show Text" +-#~ msgstr "显示文本(_S)" ++#~ msgstr "显示文本" + + #~ msgid "Starred files" + #~ msgstr "收藏的文件" +@@ -8976,10 +8976,10 @@ + #~ msgstr "右划" + + #~ msgid "_Undo" +-#~ msgstr "撤消(_U)" ++#~ msgstr "撤消" + + #~ msgid "_Redo" +-#~ msgstr "重做(_R)" ++#~ msgstr "重做" + + #~ msgid "Expand" + #~ msgstr "展开" +@@ -9519,10 +9519,10 @@ + #~ msgstr "网络" + + #~ msgid "_Unlock Drive" +-#~ msgstr "解锁驱动器(_U)" ++#~ msgstr "解锁驱动器" + + #~ msgid "_Lock Drive" +-#~ msgstr "锁定驱动器(_L)" ++#~ msgstr "锁定驱动器" + + #~ msgid "Unable to start %s" + #~ msgstr "不能启动 %s" +@@ -9631,7 +9631,7 @@ + #~ msgstr "自定义 %sx%s" + + #~ msgid "Create Fo_lder" +-#~ msgstr "创建文件夹(_L)" ++#~ msgstr "创建文件夹" + + #~ msgid "" + #~ "Specify one or more page ranges,\n" +@@ -9673,7 +9673,7 @@ + #~ msgstr "%d %%" + + #~ msgid "_Customize" +-#~ msgstr "自定义(_C)" ++#~ msgstr "自定义" + + #~ msgid "Yesterday at %-I:%M %P" + #~ msgstr "昨天%P %-I:%M" +@@ -9824,7 +9824,7 @@ + #~ msgstr "5x7" + + #~ msgid "_Location:" +-#~ msgstr "位置(_L):" ++#~ msgstr "位置:" + + #~ msgid "" + #~ "No fonts matched your search. You can revise your search and try again." +@@ -9863,7 +9863,7 @@ + #~ msgstr "点击“显示其他应用程序”了解更多选项,或点击“软件”安装新的应用程序" + + #~ msgid "C_ontinue" +-#~ msgstr "继续(_O)" ++#~ msgstr "继续" + + #~ msgid "+" + #~ msgstr "+" +@@ -9887,10 +9887,10 @@ + #~ msgstr "查看在线应用程序失败" + + #~ msgid "Input _Methods" +-#~ msgstr "输入法(_M)" ++#~ msgstr "输入法" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "插入 Unicode 控制字符(_I)" ++#~ msgstr "插入 Unicode 控制字符" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "无法获取关于文件的信息" +@@ -9917,16 +9917,16 @@ + #~ msgstr "删除选中的书签" + + #~ msgid "_Places" +-#~ msgstr "位置(_R)" ++#~ msgstr "位置" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "将选中的文件夹添加到书签" + + #~ msgid "_Copy file’s location" +-#~ msgstr "复制文件位置(_C)" ++#~ msgstr "复制文件位置" + + #~ msgid "Save in _folder:" +-#~ msgstr "保存于文件夹(_F):" ++#~ msgstr "保存于文件夹:" + + #~ msgid "Shortcut %s does not exist" + #~ msgstr "快捷方式 %s 不存在" +@@ -9944,7 +9944,7 @@ + #~ msgstr "主页" + + #~ msgid "Connect as u_ser:" +-#~ msgstr "连接为用户(_S):" ++#~ msgstr "连接为用户:" + + #~ msgid "Manage Custom Sizes..." + #~ msgstr "管理自定义大小..." +@@ -9956,7 +9956,7 @@ + #~ msgstr "显示其他应用程序" + + #~ msgid "Go _Back" +-#~ msgstr "后退(_B)" ++#~ msgstr "后退" + + #~ msgid "Shortcut %s already exists" + #~ msgstr "快捷方式 %s 已经存在" +diff -urN a/po/zh_HK.po b/po/zh_HK.po +--- a/po/zh_HK.po 2025-06-09 19:54:59.601435446 -0700 ++++ b/po/zh_HK.po 2025-06-09 20:11:49.088741132 -0700 +@@ -577,17 +577,17 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "關於(_A)" ++msgstr "關於" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "加入(_A)" ++msgstr "加入" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "粗體(_B)" ++msgstr "粗體" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" +@@ -597,12 +597,12 @@ + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "清除(_C)" ++msgstr "清除" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "關閉(_C)" ++msgstr "關閉" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -619,17 +619,17 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "複製(_C)" ++msgstr "複製" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" + msgid "Cu_t" +-msgstr "剪下(_T)" ++msgstr "剪下" + + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "刪除(_D)" ++msgstr "刪除" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -655,96 +655,96 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "執行(_E)" ++msgstr "執行" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "檔案(_F)" ++msgstr "檔案" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "尋找(_F)" ++msgstr "尋找" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "尋找與取代(_R)" ++msgstr "尋找與取代" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "軟碟(_F)" ++msgstr "軟碟" + + # (Abel) 「全螢幕模式」佔 gtktoolbar 按鈕的位置太闊了 + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "全螢幕(_F)" ++msgstr "全螢幕" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "頁尾(_B)" ++msgstr "頁尾" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "第一頁(_F)" ++msgstr "第一頁" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "最後一頁(_L)" ++msgstr "最後一頁" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "頁首(_T)" ++msgstr "頁首" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "返回(_B)" ++msgstr "返回" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "向下(_D)" ++msgstr "向下" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "前進(_F)" ++msgstr "前進" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "向上(_U)" ++msgstr "向上" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "硬碟(_H)" ++msgstr "硬碟" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "求助(_H)" ++msgstr "求助" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "首頁(_H)" ++msgstr "首頁" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -754,209 +754,209 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "資訊(_I)" ++msgstr "資訊" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "斜體(_I)" ++msgstr "斜體" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "跳轉到(_J)" ++msgstr "跳轉到" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "置中(_C)" ++msgstr "置中" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "左右填滿(_F)" ++msgstr "左右填滿" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "靠左(_L)" ++msgstr "靠左" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "靠右(_R)" ++msgstr "靠右" + + # (Abel) 「離開全螢幕模式」佔 gtktoolbar 按鈕的位置太闊了 + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "離開全螢幕(_L)" ++msgstr "離開全螢幕" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "快轉(_F)" ++msgstr "快轉" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "下一首(_N)" ++msgstr "下一首" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 + msgctxt "Stock label, media" + msgid "P_ause" +-msgstr "暫停(_A)" ++msgstr "暫停" + + #. Media label, as in "play music" + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "播放(_P)" ++msgstr "播放" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 + msgctxt "Stock label, media" + msgid "Pre_vious" +-msgstr "上一首(_V)" ++msgstr "上一首" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "錄製(_R)" ++msgstr "錄製" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 + msgctxt "Stock label, media" + msgid "R_ewind" +-msgstr "倒轉(_E)" ++msgstr "倒轉" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "網絡(_N)" ++msgstr "網絡" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "新增(_N)" ++msgstr "新增" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "開啟(_O)" ++msgstr "開啟" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "貼上(_P)" ++msgstr "貼上" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "打印(_P)" ++msgstr "打印" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" + msgid "Print Pre_view" +-msgstr "預覽打印(_V)" ++msgstr "預覽打印" + + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "屬性(_P)" ++msgstr "屬性" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "結束(_Q)" ++msgstr "結束" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "取消復原(_R)" ++msgstr "取消復原" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "重新整理(_R)" ++msgstr "重新整理" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "移除(_R)" ++msgstr "移除" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "還原(_R)" ++msgstr "還原" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "儲存(_S)" ++msgstr "儲存" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "另存新檔(_A)" ++msgstr "另存新檔" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "全部選取(_A)" ++msgstr "全部選取" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "遞增(_A)" ++msgstr "遞增" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "遞減(_D)" ++msgstr "遞減" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "拼字檢查(_S)" ++msgstr "拼字檢查" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "刪除線(_S)" ++msgstr "刪除線" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "底線(_U)" ++msgstr "底線" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "復原(_U)" ++msgstr "復原" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -967,23 +967,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "一般大小(_N)" ++msgstr "一般大小" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "最適大小(_F)" ++msgstr "最適大小" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "拉近(_I)" ++msgstr "拉近" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "拉遠(_O)" ++msgstr "拉遠" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1040,7 +1040,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "色相(_H):" ++msgstr "色相:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1048,7 +1048,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:462 + msgid "S_aturation:" +-msgstr "彩度(_S):" ++msgstr "彩度:" + + #: ../gtk/deprecated/gtkcolorsel.c:463 + msgid "Intensity of the color." +@@ -1056,7 +1056,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "明度(_V):" ++msgstr "明度:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1064,7 +1064,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "紅(_R):" ++msgstr "紅:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1072,7 +1072,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "綠(_G):" ++msgstr "綠:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1080,7 +1080,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "藍(_B):" ++msgstr "藍:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1088,7 +1088,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:474 + msgid "Op_acity:" +-msgstr "透明度(_A):" ++msgstr "透明度:" + + #: ../gtk/deprecated/gtkcolorsel.c:482 ../gtk/deprecated/gtkcolorsel.c:492 + msgid "Transparency of the color." +@@ -1096,7 +1096,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:499 + msgid "Color _name:" +-msgstr "顏色名稱(_N):" ++msgstr "顏色名稱:" + + #: ../gtk/deprecated/gtkcolorsel.c:514 + msgid "" +@@ -1106,7 +1106,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "調色盤(_P):" ++msgstr "調色盤:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1139,7 +1139,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "在這裏儲存顏色(_S)" ++msgstr "在這裏儲存顏色" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1162,7 +1162,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "取消(_C)" ++msgstr "取消" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1170,11 +1170,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "選擇(_S)" ++msgstr "選擇" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "求助(_H)" ++msgstr "求助" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1188,31 +1188,31 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "字集(_F):" ++msgstr "字集:" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "樣式(_S):" ++msgstr "樣式:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +-msgstr "大小(_Z):" ++msgstr "大小:" + + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "預覽(_P):" ++msgstr "預覽:" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "套用(_A)" ++msgstr "套用" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11638 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "確定(_O)" ++msgstr "確定" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1230,52 +1230,52 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "套用(_A)" ++msgstr "套用" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "取消(_C)" ++msgstr "取消" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" + msgid "C_onnect" +-msgstr "連線(_O)" ++msgstr "連線" + + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "轉換(_C)" ++msgstr "轉換" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "放棄(_D)" ++msgstr "放棄" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "斷線(_D)" ++msgstr "斷線" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "編輯(_E)" ++msgstr "編輯" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "索引(_I)" ++msgstr "索引" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "否(_N)" ++msgstr "否" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "確定(_O)" ++msgstr "確定" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1304,32 +1304,32 @@ + #: ../gtk/deprecated/gtkstock.c:426 + msgctxt "Stock label" + msgid "Page Set_up" +-msgstr "頁面設定(_U)" ++msgstr "頁面設定" + + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "偏好設定(_P)" ++msgstr "偏好設定" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "顏色(_C)" ++msgstr "顏色" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "字型(_F)" ++msgstr "字型" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "還原刪除(_U)" ++msgstr "還原刪除" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "是(_Y)" ++msgstr "是" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -1992,7 +1992,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "自選(_C)" ++msgstr "自選" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2007,7 +2007,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "關閉(_C)" ++msgstr "關閉" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2033,11 +2033,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "闊度(_W):" ++msgstr "闊度:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "高度(_H):" ++msgstr "高度:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2045,19 +2045,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "上(_T):" ++msgstr "上:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "下(_B):" ++msgstr "下:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "左(_L):" ++msgstr "左:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "右(_R):" ++msgstr "右:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2066,25 +2066,25 @@ + #: ../gtk/gtkentry.c:9575 ../gtk/gtkentry.c:9728 ../gtk/gtklabel.c:6530 + #: ../gtk/gtktextview.c:8841 ../gtk/gtktextview.c:9029 + msgid "Cu_t" +-msgstr "剪下(_T)" ++msgstr "剪下" + + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "複製(_C)" ++msgstr "複製" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "貼上(_P)" ++msgstr "貼上" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "刪除(_D)" ++msgstr "刪除" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "全部選取(_A)" ++msgstr "全部選取" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2105,7 +2105,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3273 + msgid "_Open" +-msgstr "開啟(_O)" ++msgstr "開啟" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2173,28 +2173,28 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "查閱檔案(_V)" ++msgstr "查閱檔案" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +-msgstr "複製位置(_C)" ++msgstr "複製位置" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "加入書籤(_A)" ++msgstr "加入書籤" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "顯示隱藏檔(_H)" ++msgstr "顯示隱藏檔" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "顯示大小欄位(_S)" ++msgstr "顯示大小欄位" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "名稱(_N):" ++msgstr "名稱:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2245,7 +2245,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "取代(_R)" ++msgstr "取代" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2343,12 +2343,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "開啟連結(_O)" ++msgstr "開啟連結" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "複製連結位址(_L)" ++msgstr "複製連結位址" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2493,15 +2493,15 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "否(_N)" ++msgstr "否" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "是(_Y)" ++msgstr "是" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +-msgstr "連線(_N)" ++msgstr "連線" + + #: ../gtk/gtkmountoperation.c:620 + msgid "Connect As" +@@ -2509,35 +2509,35 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "匿名(_A)" ++msgstr "匿名" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +-msgstr "已註冊使用者(_S)" ++msgstr "已註冊使用者" + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "使用者名稱(_U)" ++msgstr "使用者名稱" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "網域(_D)" ++msgstr "網域" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "密碼(_P)" ++msgstr "密碼" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +-msgstr "立刻忘記密碼(_I)" ++msgstr "立刻忘記密碼" + + #: ../gtk/gtkmountoperation.c:692 + msgid "Remember password until you _logout" +-msgstr "記憶密碼到登出之前(_L)" ++msgstr "記憶密碼到登出之前" + + #: ../gtk/gtkmountoperation.c:702 + msgid "Remember _forever" +-msgstr "永遠記住密碼(_F)" ++msgstr "永遠記住密碼" + + #: ../gtk/gtkmountoperation.c:1091 + #, c-format +@@ -2550,7 +2550,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "終止程序(_E)" ++msgstr "終止程序" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2711,45 +2711,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2230 ../gtk/gtkplacessidebar.c:3351 + msgid "_Start" +-msgstr "起動(_S)" ++msgstr "起動" + + #: ../gtk/gtkplacessidebar.c:2231 ../gtk/gtkplacessidebar.c:3358 + msgid "_Stop" +-msgstr "關閉(_S)" ++msgstr "關閉" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2238 + msgid "_Power On" +-msgstr "電源開啟(_P)" ++msgstr "電源開啟" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Safely Remove Drive" +-msgstr "安全的移除裝置(_S)" ++msgstr "安全的移除裝置" + + #: ../gtk/gtkplacessidebar.c:2243 + msgid "_Connect Drive" +-msgstr "連接裝置(_C)" ++msgstr "連接裝置" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Disconnect Drive" +-msgstr "中斷裝置(_D)" ++msgstr "中斷裝置" + + #: ../gtk/gtkplacessidebar.c:2248 + msgid "_Start Multi-disk Device" +-msgstr "起動多磁碟裝置(_S)" ++msgstr "起動多磁碟裝置" + + #: ../gtk/gtkplacessidebar.c:2249 + msgid "_Stop Multi-disk Device" +-msgstr "關閉多磁碟裝置(_S)" ++msgstr "關閉多磁碟裝置" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2254 + msgid "_Unlock Drive" +-msgstr "解鎖裝置(_U)" ++msgstr "解鎖裝置" + + #: ../gtk/gtkplacessidebar.c:2255 + msgid "_Lock Drive" +-msgstr "鎖定裝置(_L)" ++msgstr "鎖定裝置" + + #: ../gtk/gtkplacessidebar.c:2284 ../gtk/gtkplacessidebar.c:3033 + #, c-format +@@ -2784,15 +2784,15 @@ + + #: ../gtk/gtkplacessidebar.c:3281 + msgid "Open in New _Tab" +-msgstr "在新的分頁中開啟(_T)" ++msgstr "在新的分頁中開啟" + + #: ../gtk/gtkplacessidebar.c:3290 + msgid "Open in New _Window" +-msgstr "在新的視窗中開啟(_W)" ++msgstr "在新的視窗中開啟" + + #: ../gtk/gtkplacessidebar.c:3299 + msgid "_Add Bookmark" +-msgstr "加入書籤(_A)" ++msgstr "加入書籤" + + #: ../gtk/gtkplacessidebar.c:3305 + msgid "Remove" +@@ -2804,19 +2804,19 @@ + + #: ../gtk/gtkplacessidebar.c:3323 + msgid "_Mount" +-msgstr "掛載(_M)" ++msgstr "掛載" + + #: ../gtk/gtkplacessidebar.c:3330 + msgid "_Unmount" +-msgstr "卸載(_U)" ++msgstr "卸載" + + #: ../gtk/gtkplacessidebar.c:3337 + msgid "_Eject" +-msgstr "退出(_E)" ++msgstr "退出" + + #: ../gtk/gtkplacessidebar.c:3344 + msgid "_Detect Media" +-msgstr "偵測媒體(_D)" ++msgstr "偵測媒體" + + #: ../gtk/gtkplacessidebar.c:3953 + msgid "Computer" +@@ -2828,7 +2828,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "記住密碼(_R)" ++msgstr "記住密碼" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -2975,11 +2975,11 @@ + + #: ../gtk/gtkprintunixdialog.c:732 + msgid "Pre_view" +-msgstr "預覽(_V)" ++msgstr "預覽" + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "打印(_P)" ++msgstr "打印" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3082,19 +3082,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "複製位置(_L)" ++msgstr "複製位置" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "從清單中移除(_R)" ++msgstr "從清單中移除" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "清除清單(_C)" ++msgstr "清除清單" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "顯示私有資源(_P)" ++msgstr "顯示私有資源" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3443,7 +3443,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "儲存(_S)" ++msgstr "儲存" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -4824,7 +4824,7 @@ + #: ../modules/printbackends/file/gtkprintbackendfile.c:676 + #: ../modules/printbackends/test/gtkprintbackendtest.c:501 + msgid "Pages per _sheet:" +-msgstr "每張紙的頁數(_S):" ++msgstr "每張紙的頁數:" + + #: ../modules/printbackends/cups/gtkprintbackendcups.c:1042 + #: ../modules/printbackends/cups/gtkprintbackendcups.c:1351 +@@ -5211,7 +5211,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "輸出格式(_O)" ++msgstr "輸出格式" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5270,11 +5270,11 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "檢視所有應用程式(_V)" ++msgstr "檢視所有應用程式" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + msgid "_Find New Applications" +-msgstr "尋找新的應用程式(_F)" ++msgstr "尋找新的應用程式" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5308,15 +5308,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "下一步(_N)" ++msgstr "下一步" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "返回(_B)" ++msgstr "返回" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "完成(_F)" ++msgstr "完成" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5360,11 +5360,11 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:1 + msgid "Create Fo_lder" +-msgstr "建立資料夾(_L)" ++msgstr "建立資料夾" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "位置(_L):" ++msgstr "位置:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5400,16 +5400,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "格式(_F)" ++msgstr "格式" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "紙張大小(_P):" ++msgstr "紙張大小:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "方向(_O):" ++msgstr "方向:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5454,19 +5454,19 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "所有頁面(_A)" ++msgstr "所有頁面" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +-msgstr "目前頁面(_U)" ++msgstr "目前頁面" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:11 + msgid "Se_lection" +-msgstr "選擇區域(_L)" ++msgstr "選擇區域" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:12 + msgid "Pag_es:" +-msgstr "頁數(_E):" ++msgstr "頁數:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:13 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:15 +@@ -5488,15 +5488,15 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:21 + msgid "Copie_s:" +-msgstr "份數(_S):" ++msgstr "份數:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:22 + msgid "C_ollate" +-msgstr "順序(_O)" ++msgstr "順序" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "反序(_R)" ++msgstr "反序" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5504,19 +5504,19 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:26 + msgid "T_wo-sided:" +-msgstr "雙面(_W):" ++msgstr "雙面:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:27 + msgid "Pages per _side:" +-msgstr "每張紙的頁數(_S):" ++msgstr "每張紙的頁數:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:28 + msgid "Page or_dering:" +-msgstr "頁面順序(_D):" ++msgstr "頁面順序:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "打印範圍(_O):" ++msgstr "打印範圍:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5532,7 +5532,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:33 + msgid "Sc_ale:" +-msgstr "比例(_A):" ++msgstr "比例:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:34 + msgid "Paper" +@@ -5540,19 +5540,19 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:35 + msgid "Paper _type:" +-msgstr "紙張類型(_T):" ++msgstr "紙張類型:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:36 + msgid "Paper _source:" +-msgstr "紙張來源(_S):" ++msgstr "紙張來源:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:37 + msgid "Output t_ray:" +-msgstr "出紙匣(_R):" ++msgstr "出紙匣:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:39 + msgid "Or_ientation:" +-msgstr "方向(_I):" ++msgstr "方向:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:45 + msgid "Job Details" +@@ -5560,11 +5560,11 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:46 + msgid "Pri_ority:" +-msgstr "優先權(_O):" ++msgstr "優先權:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "帳目資訊(_B):" ++msgstr "帳目資訊:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5573,12 +5573,12 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "現在(_N)" ++msgstr "現在" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 + msgid "A_t:" +-msgstr "於(_T):" ++msgstr "於:" + + #. Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:55 +@@ -5600,7 +5600,7 @@ + #. this is one of the choices for the print at option in the print dialog. It means that the print job will not be printed until it explicitly gets 'released'. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:72 + msgid "On _hold" +-msgstr "擱置(_H)" ++msgstr "擱置" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:73 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:74 +@@ -5614,12 +5614,12 @@ + #. this is the label used for the option in the print dialog that controls the front cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:78 + msgid "Be_fore:" +-msgstr "這頁之前(_F):" ++msgstr "這頁之前:" + + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "這頁之後(_A):" ++msgstr "這頁之後:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5753,7 +5753,7 @@ + #~ msgstr "顯示其他的應用程式" + + #~ msgid "C_ontinue" +-#~ msgstr "繼續(_O)" ++#~ msgstr "繼續" + + #~ msgid "+" + #~ msgstr "+" +@@ -5774,7 +5774,7 @@ + #~ "%s" + + #~ msgid "_License" +-#~ msgstr "授權條款(_L)" ++#~ msgstr "授權條款" + + #~ msgctxt "light switch widget" + #~ msgid "Switch" +diff -urN a/po/zh_TW.po b/po/zh_TW.po +--- a/po/zh_TW.po 2025-06-09 19:54:59.605435484 -0700 ++++ b/po/zh_TW.po 2025-06-09 20:11:49.100741288 -0700 +@@ -631,17 +631,17 @@ + #: gtk/a11y/gtkimageaccessible.c:53 gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" + msgid "_About" +-msgstr "關於(_A)" ++msgstr "關於" + + #: gtk/a11y/gtkimageaccessible.c:54 gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Add" +-msgstr "加入(_A)" ++msgstr "加入" + + #: gtk/a11y/gtkimageaccessible.c:55 gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "粗體(_B)" ++msgstr "粗體" + + #: gtk/a11y/gtkimageaccessible.c:56 gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" +@@ -651,12 +651,12 @@ + #: gtk/a11y/gtkimageaccessible.c:57 gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "清除(_C)" ++msgstr "清除" + + #: gtk/a11y/gtkimageaccessible.c:58 gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Close" +-msgstr "關閉(_C)" ++msgstr "關閉" + + #: gtk/a11y/gtkimageaccessible.c:59 gtk/gtkheaderbar.c:415 gtk/gtkwindow.c:9320 + msgid "Minimize" +@@ -673,17 +673,17 @@ + #: gtk/a11y/gtkimageaccessible.c:62 gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "複製(_C)" ++msgstr "複製" + + #: gtk/a11y/gtkimageaccessible.c:63 gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "Cu_t" +-msgstr "剪下(_T)" ++msgstr "剪下" + + #: gtk/a11y/gtkimageaccessible.c:64 gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "刪除(_D)" ++msgstr "刪除" + + #: gtk/a11y/gtkimageaccessible.c:65 gtk/deprecated/gtkstock.c:339 + msgctxt "Stock label" +@@ -709,96 +709,96 @@ + #: gtk/a11y/gtkimageaccessible.c:69 gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "執行(_E)" ++msgstr "執行" + + #: gtk/a11y/gtkimageaccessible.c:70 gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_File" +-msgstr "檔案(_F)" ++msgstr "檔案" + + #: gtk/a11y/gtkimageaccessible.c:71 gtk/deprecated/gtkstock.c:363 + msgctxt "Stock label" + msgid "_Find" +-msgstr "尋找(_F)" ++msgstr "尋找" + + #: gtk/a11y/gtkimageaccessible.c:72 gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "尋找與取代(_R)" ++msgstr "尋找與取代" + + #: gtk/a11y/gtkimageaccessible.c:73 gtk/deprecated/gtkstock.c:365 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "軟碟(_F)" ++msgstr "軟碟" + + # (Abel) 「全螢幕模式」佔 gtktoolbar 按鈕的位置太闊了 + #: gtk/a11y/gtkimageaccessible.c:74 gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "全螢幕(_F)" ++msgstr "全螢幕" + + #. This is a navigation label as in "go to the bottom of the page" + #: gtk/a11y/gtkimageaccessible.c:75 gtk/deprecated/gtkstock.c:369 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "頁尾(_B)" ++msgstr "頁尾" + + #. This is a navigation label as in "go to the first page" + #: gtk/a11y/gtkimageaccessible.c:76 gtk/deprecated/gtkstock.c:371 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "第一頁(_F)" ++msgstr "第一頁" + + #. This is a navigation label as in "go to the last page" + #: gtk/a11y/gtkimageaccessible.c:77 gtk/deprecated/gtkstock.c:373 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "最後一頁(_L)" ++msgstr "最後一頁" + + #. This is a navigation label as in "go to the top of the page" + #: gtk/a11y/gtkimageaccessible.c:78 gtk/deprecated/gtkstock.c:375 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "頁首(_T)" ++msgstr "頁首" + + #. This is a navigation label as in "go back" + #: gtk/a11y/gtkimageaccessible.c:79 gtk/deprecated/gtkstock.c:377 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "返回(_B)" ++msgstr "返回" + + #. This is a navigation label as in "go down" + #: gtk/a11y/gtkimageaccessible.c:80 gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "向下(_D)" ++msgstr "向下" + + #. This is a navigation label as in "go forward" + #: gtk/a11y/gtkimageaccessible.c:81 gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "前進(_F)" ++msgstr "前進" + + #. This is a navigation label as in "go up" + #: gtk/a11y/gtkimageaccessible.c:82 gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "向上(_U)" ++msgstr "向上" + + #: gtk/a11y/gtkimageaccessible.c:83 gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "硬碟(_H)" ++msgstr "硬碟" + + #: gtk/a11y/gtkimageaccessible.c:84 gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Help" +-msgstr "求助(_H)" ++msgstr "求助" + + #: gtk/a11y/gtkimageaccessible.c:85 gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Home" +-msgstr "首頁(_H)" ++msgstr "首頁" + + #: gtk/a11y/gtkimageaccessible.c:86 gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" +@@ -808,204 +808,204 @@ + #: gtk/a11y/gtkimageaccessible.c:87 gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "義式斜體(_I)" ++msgstr "義式斜體" + + #: gtk/a11y/gtkimageaccessible.c:88 gtk/deprecated/gtkstock.c:392 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "跳轉到(_J)" ++msgstr "跳轉到" + + #. This is about text justification, "centered text" + #: gtk/a11y/gtkimageaccessible.c:89 gtk/deprecated/gtkstock.c:394 + msgctxt "Stock label" + msgid "_Center" +-msgstr "置中(_C)" ++msgstr "置中" + + #. This is about text justification + #: gtk/a11y/gtkimageaccessible.c:90 gtk/deprecated/gtkstock.c:396 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "左右填滿(_F)" ++msgstr "左右填滿" + + #. This is about text justification, "left-justified text" + #: gtk/a11y/gtkimageaccessible.c:91 gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label" + msgid "_Left" +-msgstr "靠左(_L)" ++msgstr "靠左" + + #. This is about text justification, "right-justified text" + #: gtk/a11y/gtkimageaccessible.c:92 gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label" + msgid "_Right" +-msgstr "靠右(_R)" ++msgstr "靠右" + + # (Abel) 「離開全螢幕模式」佔 gtktoolbar 按鈕的位置太闊了 + #: gtk/a11y/gtkimageaccessible.c:93 gtk/deprecated/gtkstock.c:367 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "離開全螢幕(_L)" ++msgstr "離開全螢幕" + + #. Media label, as in "fast forward" + #: gtk/a11y/gtkimageaccessible.c:94 gtk/deprecated/gtkstock.c:403 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "快轉(_F)" ++msgstr "快轉" + + #. Media label, as in "next song" + #: gtk/a11y/gtkimageaccessible.c:95 gtk/deprecated/gtkstock.c:405 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "下一首(_N)" ++msgstr "下一首" + + #. Media label, as in "pause music" + #: gtk/a11y/gtkimageaccessible.c:96 gtk/deprecated/gtkstock.c:407 + msgctxt "Stock label, media" + msgid "P_ause" +-msgstr "暫停(_A)" ++msgstr "暫停" + + #. Media label, as in "play music" + #: gtk/a11y/gtkimageaccessible.c:97 gtk/deprecated/gtkstock.c:409 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "播放(_P)" ++msgstr "播放" + + #. Media label, as in "previous song" + #: gtk/a11y/gtkimageaccessible.c:98 gtk/deprecated/gtkstock.c:411 + msgctxt "Stock label, media" + msgid "Pre_vious" +-msgstr "上一首(_V)" ++msgstr "上一首" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:99 gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "錄製(_R)" ++msgstr "錄製" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:100 gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label, media" + msgid "R_ewind" +-msgstr "倒轉(_E)" ++msgstr "倒轉" + + #. Media label + #: gtk/a11y/gtkimageaccessible.c:101 gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #: gtk/a11y/gtkimageaccessible.c:102 gtk/deprecated/gtkstock.c:418 + msgctxt "Stock label" + msgid "_Network" +-msgstr "網路(_N)" ++msgstr "網路" + + #: gtk/a11y/gtkimageaccessible.c:103 gtk/deprecated/gtkstock.c:419 + msgctxt "Stock label" + msgid "_New" +-msgstr "新增(_N)" ++msgstr "新增" + + #: gtk/a11y/gtkimageaccessible.c:104 gtk/deprecated/gtkstock.c:422 + msgctxt "Stock label" + msgid "_Open" +-msgstr "開啟(_O)" ++msgstr "開啟" + + #: gtk/a11y/gtkimageaccessible.c:105 gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "貼上(_P)" ++msgstr "貼上" + + #: gtk/a11y/gtkimageaccessible.c:106 gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Print" +-msgstr "列印(_P)" ++msgstr "列印" + + #: gtk/a11y/gtkimageaccessible.c:107 gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "Print Pre_view" +-msgstr "預覽列印(_V)" ++msgstr "預覽列印" + + #: gtk/a11y/gtkimageaccessible.c:108 gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "屬性(_P)" ++msgstr "屬性" + + #: gtk/a11y/gtkimageaccessible.c:109 gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "退出(_Q)" ++msgstr "退出" + + #: gtk/a11y/gtkimageaccessible.c:110 gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "重做(_R)" ++msgstr "重做" + + #: gtk/a11y/gtkimageaccessible.c:111 gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "重新整理(_R)" ++msgstr "重新整理" + + #: gtk/a11y/gtkimageaccessible.c:112 gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "移除(_R)" ++msgstr "移除" + + #: gtk/a11y/gtkimageaccessible.c:113 gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "還原(_R)" ++msgstr "還原" + + #: gtk/a11y/gtkimageaccessible.c:114 gtk/deprecated/gtkstock.c:442 + msgctxt "Stock label" + msgid "_Save" +-msgstr "儲存(_S)" ++msgstr "儲存" + + #: gtk/a11y/gtkimageaccessible.c:115 gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "另存新檔(_A)" ++msgstr "另存新檔" + + #: gtk/a11y/gtkimageaccessible.c:116 gtk/deprecated/gtkstock.c:444 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "全選(_A)" ++msgstr "全選" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:117 gtk/deprecated/gtkstock.c:448 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "遞增(_A)" ++msgstr "遞增" + + #. Sorting direction + #: gtk/a11y/gtkimageaccessible.c:118 gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "遞減(_D)" ++msgstr "遞減" + + #: gtk/a11y/gtkimageaccessible.c:119 gtk/deprecated/gtkstock.c:451 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "拼字檢查(_S)" ++msgstr "拼字檢查" + + #: gtk/a11y/gtkimageaccessible.c:120 gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "停止(_S)" ++msgstr "停止" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:121 gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "刪除線(_S)" ++msgstr "刪除線" + + #. Font variant + #: gtk/a11y/gtkimageaccessible.c:122 gtk/deprecated/gtkstock.c:457 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "底線(_U)" ++msgstr "底線" + + #: gtk/a11y/gtkimageaccessible.c:123 gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "還原(_U)" ++msgstr "還原" + + #: gtk/a11y/gtkimageaccessible.c:124 gtk/deprecated/gtkstock.c:388 + msgctxt "Stock label" +@@ -1016,23 +1016,23 @@ + #: gtk/a11y/gtkimageaccessible.c:125 gtk/deprecated/gtkstock.c:461 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "一般大小(_N)" ++msgstr "一般大小" + + #. Zoom + #: gtk/a11y/gtkimageaccessible.c:126 gtk/deprecated/gtkstock.c:463 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "最適大小(_F)" ++msgstr "最適大小" + + #: gtk/a11y/gtkimageaccessible.c:127 gtk/deprecated/gtkstock.c:464 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "拉近(_I)" ++msgstr "拉近" + + #: gtk/a11y/gtkimageaccessible.c:128 gtk/deprecated/gtkstock.c:465 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "拉遠(_O)" ++msgstr "拉遠" + + #: gtk/a11y/gtkmenubuttonaccessible.c:102 gtk/inspector/window.ui:459 + msgid "Menu" +@@ -1093,7 +1093,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:461 + msgid "_Hue:" +-msgstr "色相(_H):" ++msgstr "色相:" + + #: gtk/deprecated/gtkcolorsel.c:462 + msgid "Position on the color wheel." +@@ -1101,7 +1101,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:464 + msgid "S_aturation:" +-msgstr "彩度(_S):" ++msgstr "彩度:" + + #: gtk/deprecated/gtkcolorsel.c:465 + msgid "Intensity of the color." +@@ -1109,7 +1109,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:466 + msgid "_Value:" +-msgstr "明度(_V):" ++msgstr "明度:" + + #: gtk/deprecated/gtkcolorsel.c:467 + msgid "Brightness of the color." +@@ -1117,7 +1117,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:468 + msgid "_Red:" +-msgstr "紅(_R):" ++msgstr "紅:" + + #: gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of red light in the color." +@@ -1125,7 +1125,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:470 + msgid "_Green:" +-msgstr "綠(_G)︰" ++msgstr "綠︰" + + #: gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of green light in the color." +@@ -1133,7 +1133,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:472 + msgid "_Blue:" +-msgstr "藍(_B)︰" ++msgstr "藍︰" + + #: gtk/deprecated/gtkcolorsel.c:473 + msgid "Amount of blue light in the color." +@@ -1141,7 +1141,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:476 + msgid "Op_acity:" +-msgstr "透明度(_A):" ++msgstr "透明度:" + + #: gtk/deprecated/gtkcolorsel.c:484 gtk/deprecated/gtkcolorsel.c:494 + msgid "Transparency of the color." +@@ -1149,7 +1149,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:501 + msgid "Color _name:" +-msgstr "顏色名稱(_N):" ++msgstr "顏色名稱:" + + #: gtk/deprecated/gtkcolorsel.c:516 + msgid "" +@@ -1160,7 +1160,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:548 + msgid "_Palette:" +-msgstr "調色盤(_P):" ++msgstr "調色盤:" + + #: gtk/deprecated/gtkcolorsel.c:578 + msgid "Color Wheel" +@@ -1193,7 +1193,7 @@ + + #: gtk/deprecated/gtkcolorsel.c:1458 + msgid "_Save color here" +-msgstr "在這裡儲存顏色(_S)" ++msgstr "在這裡儲存顏色" + + #: gtk/deprecated/gtkcolorsel.c:1664 + msgid "" +@@ -1214,17 +1214,17 @@ + #: gtk/ui/gtkappchooserdialog.ui:61 gtk/ui/gtkassistant.ui:125 + #: gtk/ui/gtkcolorchooserdialog.ui:34 gtk/ui/gtkfontchooserdialog.ui:31 + msgid "_Cancel" +-msgstr "取消(_C)" ++msgstr "取消" + + #: gtk/deprecated/gtkcolorseldialog.c:195 gtk/gtkprinteroptionwidget.c:546 + #: gtk/ui/gtkappchooserdialog.ui:67 gtk/ui/gtkcolorchooserdialog.ui:40 + #: gtk/ui/gtkfontchooserdialog.ui:37 + msgid "_Select" +-msgstr "選取(_S)" ++msgstr "選取" + + #: gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "求助(_H)" ++msgstr "求助" + + #: gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1238,30 +1238,30 @@ + + #: gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "字集(_F):" ++msgstr "字集:" + + #: gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "樣式(_S):" ++msgstr "樣式:" + + #: gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +-msgstr "大小(_Z):" ++msgstr "大小:" + + #. create the text entry widget + #: gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "預覽(_P):" ++msgstr "預覽:" + + #: gtk/deprecated/gtkfontsel.c:1693 gtk/gtkpagesetupunixdialog.c:198 + #: gtk/ui/gtkassistant.ui:50 + msgid "_Apply" +-msgstr "套用(_A)" ++msgstr "套用" + + #: gtk/deprecated/gtkfontsel.c:1698 gtk/gtkmessagedialog.c:944 + #: gtk/gtkmessagedialog.c:966 gtk/gtkprintbackend.c:780 gtk/gtkwindow.c:12791 + msgid "_OK" +-msgstr "確定(_O)" ++msgstr "確定" + + #: gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1279,57 +1279,57 @@ + #: gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "套用(_A)" ++msgstr "套用" + + #: gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "取消(_C)" ++msgstr "取消" + + #: gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "C_onnect" +-msgstr "連接(_O)" ++msgstr "連接" + + #: gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "轉換(_C)" ++msgstr "轉換" + + #: gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "放棄(_D)" ++msgstr "放棄" + + #: gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "斷線(_D)" ++msgstr "斷線" + + #: gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "編輯(_E)" ++msgstr "編輯" + + #: gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Index" +-msgstr "索引(_I)" ++msgstr "索引" + + #: gtk/deprecated/gtkstock.c:390 + msgctxt "Stock label" + msgid "_Information" +-msgstr "資訊(_I)" ++msgstr "資訊" + + #: gtk/deprecated/gtkstock.c:420 + msgctxt "Stock label" + msgid "_No" +-msgstr "否(_N)" ++msgstr "否" + + #: gtk/deprecated/gtkstock.c:421 + msgctxt "Stock label" + msgid "_OK" +-msgstr "確定(_O)" ++msgstr "確定" + + #. Page orientation + #: gtk/deprecated/gtkstock.c:424 +@@ -1358,32 +1358,32 @@ + #: gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "Page Set_up" +-msgstr "頁面設定(_U)" ++msgstr "頁面設定" + + #: gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "偏好設定(_P)" ++msgstr "偏好設定" + + #: gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Color" +-msgstr "顏色(_C)" ++msgstr "顏色" + + #: gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Font" +-msgstr "字型(_F)" ++msgstr "字型" + + #: gtk/deprecated/gtkstock.c:455 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "還原刪除(_U)" ++msgstr "還原刪除" + + #: gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "是(_Y)" ++msgstr "是" + + #: gtk/deprecated/gtkuimanager.c:1782 + #, c-format +@@ -1497,16 +1497,16 @@ + + #: gtk/gtkaboutdialog.c:703 + msgid "C_redits" +-msgstr "銘謝(_R)" ++msgstr "銘謝" + + #: gtk/gtkaboutdialog.c:711 + msgid "_License" +-msgstr "授權條款(_L)" ++msgstr "授權條款" + + #: gtk/gtkaboutdialog.c:720 gtk/gtkcustompaperunixdialog.c:329 + #: gtk/gtkmessagedialog.c:948 gtk/ui/gtkassistant.ui:144 + msgid "_Close" +-msgstr "關閉(_C)" ++msgstr "關閉" + + #: gtk/gtkaboutdialog.c:1004 + msgid "Could not show link" +@@ -2168,7 +2168,7 @@ + + #: gtk/gtkcolorswatch.c:360 + msgid "C_ustomize" +-msgstr "自訂(_U)" ++msgstr "自訂" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2204,11 +2204,11 @@ + + #: gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "寬度(_W):" ++msgstr "寬度:" + + #: gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "高度(_H):" ++msgstr "高度:" + + #: gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2216,19 +2216,19 @@ + + #: gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "上(_T):" ++msgstr "上:" + + #: gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "下(_B):" ++msgstr "下:" + + #: gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "左(_L):" ++msgstr "左:" + + #: gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "右(_R):" ++msgstr "右:" + + #: gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2236,28 +2236,28 @@ + + #: gtk/gtkentry.c:9591 gtk/gtklabel.c:6687 gtk/gtktextview.c:9525 + msgid "Cu_t" +-msgstr "剪下(_T)" ++msgstr "剪下" + + #: gtk/gtkentry.c:9595 gtk/gtklabel.c:6688 gtk/gtktextview.c:9529 + msgid "_Copy" +-msgstr "複製(_C)" ++msgstr "複製" + + #: gtk/gtkentry.c:9599 gtk/gtklabel.c:6689 gtk/gtktextview.c:9531 + msgid "_Paste" +-msgstr "貼上(_P)" ++msgstr "貼上" + + #: gtk/gtkentry.c:9602 gtk/gtkfilechooserwidget.c:1500 + #: gtk/gtkfilechooserwidget.c:2335 gtk/gtklabel.c:6691 gtk/gtktextview.c:9534 + msgid "_Delete" +-msgstr "刪除(_D)" ++msgstr "刪除" + + #: gtk/gtkentry.c:9613 gtk/gtklabel.c:6700 gtk/gtktextview.c:9548 + msgid "Select _All" +-msgstr "全選(_A)" ++msgstr "全選" + + #: gtk/gtkentry.c:9623 gtk/gtktextview.c:9558 + msgid "Insert _Emoji" +-msgstr "插入繪文字(_E)" ++msgstr "插入繪文字" + + #: gtk/gtkentry.c:9799 gtk/gtktextview.c:9782 + msgid "Select all" +@@ -2301,18 +2301,18 @@ + + #: gtk/gtkfilechooserdialog.c:542 + msgid "_Name" +-msgstr "名稱(_N)" ++msgstr "名稱" + + #. Open item is always present + #: gtk/gtkfilechoosernative.c:546 gtk/gtkfilechoosernative.c:631 + #: gtk/gtkplacessidebar.c:3628 gtk/gtkplacessidebar.c:3696 + #: gtk/gtkplacesview.c:1705 + msgid "_Open" +-msgstr "開啟(_O)" ++msgstr "開啟" + + #: gtk/gtkfilechoosernative.c:631 gtk/inspector/css-editor.c:202 + msgid "_Save" +-msgstr "儲存(_S)" ++msgstr "儲存" + + #: gtk/gtkfilechoosernativequartz.c:331 gtk/ui/gtkfilechooserwidget.ui:435 + msgid "Select which types of files are shown" +@@ -2461,48 +2461,48 @@ + + #: gtk/gtkfilechooserwidget.c:2330 + msgid "_Visit File" +-msgstr "查閱檔案(_V)" ++msgstr "查閱檔案" + + #: gtk/gtkfilechooserwidget.c:2331 + msgid "_Open With File Manager" +-msgstr "以檔案管理員開啟(_O)" ++msgstr "以檔案管理員開啟" + + #: gtk/gtkfilechooserwidget.c:2332 + msgid "_Copy Location" +-msgstr "複製位置(_C)" ++msgstr "複製位置" + + #: gtk/gtkfilechooserwidget.c:2333 + msgid "_Add to Bookmarks" +-msgstr "加入書籤(_A)" ++msgstr "加入書籤" + + #: gtk/gtkfilechooserwidget.c:2334 gtk/gtkplacessidebar.c:2744 + #: gtk/ui/gtkfilechooserwidget.ui:569 + msgid "_Rename" +-msgstr "重新命名(_R)" ++msgstr "重新命名" + + #: gtk/gtkfilechooserwidget.c:2336 + msgid "_Move to Trash" +-msgstr "丟進垃圾桶(_M)" ++msgstr "丟進垃圾桶" + + #: gtk/gtkfilechooserwidget.c:2340 + msgid "Show _Hidden Files" +-msgstr "顯示隱藏檔(_H)" ++msgstr "顯示隱藏檔" + + #: gtk/gtkfilechooserwidget.c:2341 + msgid "Show _Size Column" +-msgstr "顯示大小欄(_S)" ++msgstr "顯示大小欄" + + #: gtk/gtkfilechooserwidget.c:2342 + msgid "Show T_ype Column" +-msgstr "顯示類型欄(_Y)" ++msgstr "顯示類型欄" + + #: gtk/gtkfilechooserwidget.c:2343 + msgid "Show _Time" +-msgstr "顯示時間(_T)" ++msgstr "顯示時間" + + #: gtk/gtkfilechooserwidget.c:2344 + msgid "Sort _Folders before Files" +-msgstr "在檔案前列出資料夾(_F)" ++msgstr "在檔案前列出資料夾" + + #. this is the header for the location column in the print dialog + #: gtk/gtkfilechooserwidget.c:2626 gtk/inspector/css-node-tree.ui:141 +@@ -2513,7 +2513,7 @@ + #. Label + #: gtk/gtkfilechooserwidget.c:2719 + msgid "_Name:" +-msgstr "名稱(_N):" ++msgstr "名稱:" + + #: gtk/gtkfilechooserwidget.c:3344 gtk/gtkfilechooserwidget.c:3358 + #, c-format +@@ -2645,7 +2645,7 @@ + + #: gtk/gtkfilechooserwidget.c:6574 gtk/gtkprintunixdialog.c:677 + msgid "_Replace" +-msgstr "取代(_R)" ++msgstr "取代" + + #: gtk/gtkfilechooserwidget.c:6793 + msgid "You do not have access to the specified folder." +@@ -2794,12 +2794,12 @@ + #. Open Link + #: gtk/gtklabel.c:6668 + msgid "_Open Link" +-msgstr "開啟連結(_O)" ++msgstr "開啟連結" + + #. Copy Link Address + #: gtk/gtklabel.c:6677 + msgid "Copy _Link Address" +-msgstr "複製連結位址(_L)" ++msgstr "複製連結位址" + + #: gtk/gtk-launch.c:42 + msgid "Show program version" +@@ -2944,15 +2944,15 @@ + + #: gtk/gtkmessagedialog.c:956 + msgid "_No" +-msgstr "否(_N)" ++msgstr "否" + + #: gtk/gtkmessagedialog.c:957 + msgid "_Yes" +-msgstr "是(_Y)" ++msgstr "是" + + #: gtk/gtkmountoperation.c:595 + msgid "Co_nnect" +-msgstr "連線(_N)" ++msgstr "連線" + + #: gtk/gtkmountoperation.c:668 + msgid "Connect As" +@@ -2960,19 +2960,19 @@ + + #: gtk/gtkmountoperation.c:677 + msgid "_Anonymous" +-msgstr "匿名(_A)" ++msgstr "匿名" + + #: gtk/gtkmountoperation.c:686 + msgid "Registered U_ser" +-msgstr "已註冊使用者(_S)" ++msgstr "已註冊使用者" + + #: gtk/gtkmountoperation.c:697 + msgid "_Username" +-msgstr "使用者名稱(_U)" ++msgstr "使用者名稱" + + #: gtk/gtkmountoperation.c:702 + msgid "_Domain" +-msgstr "網域(_D)" ++msgstr "網域" + + #: gtk/gtkmountoperation.c:711 + msgid "Volume type" +@@ -2980,7 +2980,7 @@ + + #: gtk/gtkmountoperation.c:721 + msgid "_Hidden" +-msgstr "隱藏(_H)" ++msgstr "隱藏" + + #: gtk/gtkmountoperation.c:724 + msgid "_Windows system" +@@ -2992,19 +2992,19 @@ + + #: gtk/gtkmountoperation.c:733 + msgid "_Password" +-msgstr "密碼(_P)" ++msgstr "密碼" + + #: gtk/gtkmountoperation.c:755 + msgid "Forget password _immediately" +-msgstr "立即忘記密碼(_I)" ++msgstr "立即忘記密碼" + + #: gtk/gtkmountoperation.c:765 + msgid "Remember password until you _logout" +-msgstr "記憶密碼到登出之前(_L)" ++msgstr "記憶密碼到登出之前" + + #: gtk/gtkmountoperation.c:775 + msgid "Remember _forever" +-msgstr "永遠記住密碼(_F)" ++msgstr "永遠記住密碼" + + #: gtk/gtkmountoperation.c:1170 + #, c-format +@@ -3018,7 +3018,7 @@ + + #: gtk/gtkmountoperation.c:1389 + msgid "_End Process" +-msgstr "終止程序(_E)" ++msgstr "終止程序" + + #: gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -3180,46 +3180,46 @@ + #. Adjust start/stop items to reflect the type of the drive + #: gtk/gtkplacessidebar.c:2337 gtk/gtkplacessidebar.c:3716 + msgid "_Start" +-msgstr "啟動(_S)" ++msgstr "啟動" + + #: gtk/gtkplacessidebar.c:2338 gtk/gtkplacessidebar.c:3717 + #, fuzzy + msgid "_Stop" +-msgstr "關閉(_S)" ++msgstr "關閉" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: gtk/gtkplacessidebar.c:2345 + msgid "_Power On" +-msgstr "電源開啟(_P)" ++msgstr "電源開啟" + + #: gtk/gtkplacessidebar.c:2346 + msgid "_Safely Remove Drive" +-msgstr "安全的移除裝置(_S)" ++msgstr "安全的移除裝置" + + #: gtk/gtkplacessidebar.c:2350 + msgid "_Connect Drive" +-msgstr "連接裝置(_C)" ++msgstr "連接裝置" + + #: gtk/gtkplacessidebar.c:2351 + msgid "_Disconnect Drive" +-msgstr "中斷裝置(_D)" ++msgstr "中斷裝置" + + #: gtk/gtkplacessidebar.c:2355 + msgid "_Start Multi-disk Device" +-msgstr "起動多磁碟裝置(_S)" ++msgstr "起動多磁碟裝置" + + #: gtk/gtkplacessidebar.c:2356 + msgid "_Stop Multi-disk Device" +-msgstr "停止多磁碟裝置(_S)" ++msgstr "停止多磁碟裝置" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: gtk/gtkplacessidebar.c:2361 + msgid "_Unlock Device" +-msgstr "解鎖裝置(_U)" ++msgstr "解鎖裝置" + + #: gtk/gtkplacessidebar.c:2362 + msgid "_Lock Device" +-msgstr "鎖定裝置(_L)" ++msgstr "鎖定裝置" + + #: gtk/gtkplacessidebar.c:2400 gtk/gtkplacessidebar.c:3397 + #, c-format +@@ -3274,20 +3274,20 @@ + #: gtk/gtkplacessidebar.c:3633 gtk/gtkplacessidebar.c:3699 + #: gtk/gtkplacesview.c:1715 + msgid "Open in New _Tab" +-msgstr "在新分頁中開啟(_T)" ++msgstr "在新分頁中開啟" + + #: gtk/gtkplacessidebar.c:3639 gtk/gtkplacessidebar.c:3702 + #: gtk/gtkplacesview.c:1726 + msgid "Open in New _Window" +-msgstr "在新視窗中開啟(_W)" ++msgstr "在新視窗中開啟" + + #: gtk/gtkplacessidebar.c:3706 + msgid "_Add Bookmark" +-msgstr "加入書籤(_A)" ++msgstr "加入書籤" + + #: gtk/gtkplacessidebar.c:3707 + msgid "_Remove" +-msgstr "移除(_R)" ++msgstr "移除" + + #: gtk/gtkplacessidebar.c:3708 + msgid "Rename…" +@@ -3295,19 +3295,19 @@ + + #: gtk/gtkplacessidebar.c:3712 gtk/gtkplacesview.c:1760 + msgid "_Mount" +-msgstr "掛載(_M)" ++msgstr "掛載" + + #: gtk/gtkplacessidebar.c:3713 gtk/gtkplacesview.c:1750 + msgid "_Unmount" +-msgstr "卸載(_U)" ++msgstr "卸載" + + #: gtk/gtkplacessidebar.c:3714 + msgid "_Eject" +-msgstr "退出(_E)" ++msgstr "退出" + + #: gtk/gtkplacessidebar.c:3715 + msgid "_Detect Media" +-msgstr "偵測媒體(_D)" ++msgstr "偵測媒體" + + #: gtk/gtkplacessidebar.c:4161 gtk/gtkplacesview.c:1122 + msgid "Computer" +@@ -3329,7 +3329,7 @@ + #. Restore from Cancel to Connect + #: gtk/gtkplacesview.c:1250 gtk/ui/gtkplacesview.ui:317 + msgid "Con_nect" +-msgstr "連線(_N)" ++msgstr "連線" + + #. if it wasn't cancelled show a dialog + #: gtk/gtkplacesview.c:1393 +@@ -3339,7 +3339,7 @@ + #. Allow to cancel the operation + #: gtk/gtkplacesview.c:1494 + msgid "Cance_l" +-msgstr "取消(_L)" ++msgstr "取消" + + #: gtk/gtkplacesview.c:1657 + msgid "AppleTalk" +@@ -3382,11 +3382,11 @@ + + #: gtk/gtkplacesview.c:1750 + msgid "_Disconnect" +-msgstr "斷線(_D)" ++msgstr "斷線" + + #: gtk/gtkplacesview.c:1760 + msgid "_Connect" +-msgstr "連線(_C)" ++msgstr "連線" + + #: gtk/gtkplacesview.c:1901 + msgid "Unable to get remote server location" +@@ -3425,7 +3425,7 @@ + + #: gtk/gtkprintbackend.c:849 + msgid "_Remember password" +-msgstr "記住密碼(_R)" ++msgstr "記住密碼" + + #: gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3578,11 +3578,11 @@ + + #: gtk/gtkprintunixdialog.c:746 + msgid "Pre_view" +-msgstr "預覽(_V)" ++msgstr "預覽" + + #: gtk/gtkprintunixdialog.c:748 + msgid "_Print" +-msgstr "列印(_P)" ++msgstr "列印" + + #: gtk/gtkprintunixdialog.c:861 + msgid "Getting printer information failed" +@@ -3683,19 +3683,19 @@ + + #: gtk/gtkrecentchooserdefault.c:1689 + msgid "Copy _Location" +-msgstr "複製位置(_L)" ++msgstr "複製位置" + + #: gtk/gtkrecentchooserdefault.c:1700 + msgid "_Remove From List" +-msgstr "從列表中移除(_R)" ++msgstr "從列表中移除" + + #: gtk/gtkrecentchooserdefault.c:1707 + msgid "_Clear List" +-msgstr "清除列表(_C)" ++msgstr "清除列表" + + #: gtk/gtkrecentchooserdefault.c:1719 + msgid "Show _Private Resources" +-msgstr "顯示私有資源(_P)" ++msgstr "顯示私有資源" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3788,7 +3788,7 @@ + + #: gtk/gtkshortcutssection.c:451 + msgid "_Show All" +-msgstr "顯示全部(_S)" ++msgstr "顯示全部" + + #: gtk/gtkshortcutsshortcut.c:136 + msgid "Two finger pinch" +@@ -4952,7 +4952,7 @@ + #: gtk/open-type-layout.h:57 + msgctxt "OpenType layout" + msgid "Italics" +-msgstr "義式斜體(_I)" ++msgstr "義式斜體" + + #: gtk/open-type-layout.h:58 + msgctxt "OpenType layout" +@@ -7049,11 +7049,11 @@ + + #: gtk/ui/gtkappchooserdialog.ui:78 + msgid "_View All Applications" +-msgstr "檢視所有應用程式(_V)" ++msgstr "檢視所有應用程式" + + #: gtk/ui/gtkappchooserdialog.ui:86 + msgid "_Find New Applications" +-msgstr "尋找新的應用程式(_F)" ++msgstr "尋找新的應用程式" + + #: gtk/ui/gtkappchooserwidget.ui:119 + msgid "No applications found." +@@ -7093,15 +7093,15 @@ + + #: gtk/ui/gtkassistant.ui:68 + msgid "_Next" +-msgstr "下一步(_N)" ++msgstr "下一步" + + #: gtk/ui/gtkassistant.ui:88 + msgid "_Back" +-msgstr "返回(_B)" ++msgstr "返回" + + #: gtk/ui/gtkassistant.ui:107 + msgid "_Finish" +-msgstr "完成(_F)" ++msgstr "完成" + + #: gtk/ui/gtkcolorchooserdialog.ui:6 + msgid "Select a Color" +@@ -7226,7 +7226,7 @@ + + #: gtk/ui/gtkfilechooserwidget.ui:504 + msgid "_Create" +-msgstr "建立(_C)" ++msgstr "建立" + + #: gtk/ui/gtkfontchooserdialog.ui:6 + msgid "Select Font" +@@ -7250,15 +7250,15 @@ + + #: gtk/ui/gtkpagesetupunixdialog.ui:47 + msgid "_Format for:" +-msgstr "格式(_F)" ++msgstr "格式" + + #: gtk/ui/gtkpagesetupunixdialog.ui:80 gtk/ui/gtkprintunixdialog.ui:747 + msgid "_Paper size:" +-msgstr "紙張大小(_P):" ++msgstr "紙張大小:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:122 + msgid "_Orientation:" +-msgstr "方向(_O):" ++msgstr "方向:" + + #: gtk/ui/gtkpagesetupunixdialog.ui:152 gtk/ui/gtkprintunixdialog.ui:794 + msgid "Portrait" +@@ -7312,7 +7312,7 @@ + + #: gtk/ui/gtkplacesview.ui:307 + msgid "Connect to _Server" +-msgstr "連接伺服器(_S)" ++msgstr "連接伺服器" + + #: gtk/ui/gtkplacesview.ui:340 + msgid "Enter server address…" +@@ -7333,19 +7333,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:201 + msgid "_All Pages" +-msgstr "所有頁面(_A)" ++msgstr "所有頁面" + + #: gtk/ui/gtkprintunixdialog.ui:216 + msgid "C_urrent Page" +-msgstr "目前頁面(_U)" ++msgstr "目前頁面" + + #: gtk/ui/gtkprintunixdialog.ui:233 + msgid "Se_lection" +-msgstr "選取區域(_L)" ++msgstr "選取區域" + + #: gtk/ui/gtkprintunixdialog.ui:249 + msgid "Pag_es:" +-msgstr "頁面(_E):" ++msgstr "頁面:" + + #: gtk/ui/gtkprintunixdialog.ui:252 gtk/ui/gtkprintunixdialog.ui:270 + #: gtk/ui/gtkprintunixdialog.ui:277 +@@ -7366,16 +7366,16 @@ + + #: gtk/ui/gtkprintunixdialog.ui:334 + msgid "Copie_s:" +-msgstr "份數(_S):" ++msgstr "份數:" + + #: gtk/ui/gtkprintunixdialog.ui:361 + #, fuzzy + msgid "C_ollate" +-msgstr "順序分頁(_O)" ++msgstr "順序分頁" + + #: gtk/ui/gtkprintunixdialog.ui:375 + msgid "_Reverse" +-msgstr "反序(_R)" ++msgstr "反序" + + #: gtk/ui/gtkprintunixdialog.ui:452 + msgid "Layout" +@@ -7383,19 +7383,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:475 + msgid "T_wo-sided:" +-msgstr "雙面(_W):" ++msgstr "雙面:" + + #: gtk/ui/gtkprintunixdialog.ui:500 + msgid "Pages per _side:" +-msgstr "每一面的頁數(_S):" ++msgstr "每一面的頁數:" + + #: gtk/ui/gtkprintunixdialog.ui:527 + msgid "Page or_dering:" +-msgstr "頁面排序(_D):" ++msgstr "頁面排序:" + + #: gtk/ui/gtkprintunixdialog.ui:553 + msgid "_Only print:" +-msgstr "列印範圍(_O):" ++msgstr "列印範圍:" + + #: gtk/ui/gtkprintunixdialog.ui:570 + msgid "All sheets" +@@ -7411,7 +7411,7 @@ + + #: gtk/ui/gtkprintunixdialog.ui:585 + msgid "Sc_ale:" +-msgstr "比例(_A):" ++msgstr "比例:" + + #: gtk/ui/gtkprintunixdialog.ui:649 + msgid "Paper" +@@ -7419,19 +7419,19 @@ + + #: gtk/ui/gtkprintunixdialog.ui:672 + msgid "Paper _type:" +-msgstr "紙張類型(_T):" ++msgstr "紙張類型:" + + #: gtk/ui/gtkprintunixdialog.ui:697 + msgid "Paper _source:" +-msgstr "紙張來源(_S):" ++msgstr "紙張來源:" + + #: gtk/ui/gtkprintunixdialog.ui:722 + msgid "Output t_ray:" +-msgstr "出紙匣(_R):" ++msgstr "出紙匣:" + + #: gtk/ui/gtkprintunixdialog.ui:776 + msgid "Or_ientation:" +-msgstr "方向(_I):" ++msgstr "方向:" + + #: gtk/ui/gtkprintunixdialog.ui:876 + msgid "Job Details" +@@ -7439,11 +7439,11 @@ + + #: gtk/ui/gtkprintunixdialog.ui:899 + msgid "Pri_ority:" +-msgstr "優先權(_O):" ++msgstr "優先權:" + + #: gtk/ui/gtkprintunixdialog.ui:923 + msgid "_Billing info:" +-msgstr "帳目資訊(_B):" ++msgstr "帳目資訊:" + + #: gtk/ui/gtkprintunixdialog.ui:967 + msgid "Print Document" +@@ -7452,12 +7452,12 @@ + #. this is one of the choices for the print at option in the print dialog + #: gtk/ui/gtkprintunixdialog.ui:987 + msgid "_Now" +-msgstr "現在(_N)" ++msgstr "現在" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: gtk/ui/gtkprintunixdialog.ui:1003 + msgid "A_t:" +-msgstr "於(_T):" ++msgstr "於:" + + #. Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported. + #: gtk/ui/gtkprintunixdialog.ui:1007 gtk/ui/gtkprintunixdialog.ui:1009 +@@ -7478,7 +7478,7 @@ + #. this is one of the choices for the print at option in the print dialog. It means that the print job will not be printed until it explicitly gets 'released'. + #: gtk/ui/gtkprintunixdialog.ui:1050 + msgid "On _hold" +-msgstr "擱置(_H)" ++msgstr "擱置" + + #: gtk/ui/gtkprintunixdialog.ui:1054 gtk/ui/gtkprintunixdialog.ui:1055 + msgid "Hold the job until it is explicitly released" +@@ -7491,12 +7491,12 @@ + #. this is the label used for the option in the print dialog that controls the front cover page. + #: gtk/ui/gtkprintunixdialog.ui:1115 + msgid "Be_fore:" +-msgstr "這頁之前(_F):" ++msgstr "這頁之前:" + + #. this is the label used for the option in the print dialog that controls the back cover page. + #: gtk/ui/gtkprintunixdialog.ui:1139 + msgid "_After:" +-msgstr "這頁之後(_A):" ++msgstr "這頁之後:" + + #: gtk/ui/gtkprintunixdialog.ui:1181 + msgid "Job" +@@ -8300,7 +8300,7 @@ + #: modules/printbackends/file/gtkprintbackendfile.c:676 + #: modules/printbackends/test/gtkprintbackendtest.c:501 + msgid "Pages per _sheet:" +-msgstr "每張紙的頁數(_S):" ++msgstr "每張紙的頁數:" + + #: modules/printbackends/file/gtkprintbackendfile.c:735 + msgid "File" +@@ -8308,7 +8308,7 @@ + + #: modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "輸出格式(_O)" ++msgstr "輸出格式" + + #: modules/printbackends/lpr/gtkprintbackendlpr.c:394 + msgid "Print to LPR" +@@ -8939,7 +8939,7 @@ + #~ msgstr "顯示文字" + + #~ msgid "_Show Text" +-#~ msgstr "顯示文字(_S)" ++#~ msgstr "顯示文字" + + #~ msgid "Swipe left" + #~ msgstr "向左輕掃" +@@ -8948,10 +8948,10 @@ + #~ msgstr "向右輕掃" + + #~ msgid "_Undo" +-#~ msgstr "復原(_U)" ++#~ msgstr "復原" + + #~ msgid "_Redo" +-#~ msgstr "取消復原(_R)" ++#~ msgstr "取消復原" + + #~ msgid "Expand" + #~ msgstr "擴展" +@@ -9416,7 +9416,7 @@ + #~ msgstr "樣式屬性" + + #~ msgid "_Customize" +-#~ msgstr "自訂(_C)" ++#~ msgstr "自訂" + + #~ msgid "X display" + #~ msgstr "X 顯示" +@@ -9608,7 +9608,7 @@ + #~ msgstr "5x7" + + #~ msgid "_Location:" +-#~ msgstr "位置(_L):" ++#~ msgstr "位置:" + + #~ msgid "Unmaximize" + #~ msgstr "取消最大化" +@@ -9668,7 +9668,7 @@ + #~ "點選「顯示其他的應用程式」取得更多選項,或「軟體」來安裝新的應用程式" + + #~ msgid "C_ontinue" +-#~ msgstr "繼續(_O)" ++#~ msgstr "繼續" + + #~ msgid "+" + #~ msgstr "+" +diff -urN a/po-properties/ab.po b/po-properties/ab.po +--- a/po-properties/ab.po 2025-06-09 19:54:59.149431007 -0700 ++++ b/po-properties/ab.po 2025-06-09 20:11:48.340731420 -0700 +@@ -9314,7 +9314,7 @@ + "\t“”\t“”\n" + "\t“source-id” not available\t“source-id” ахь анеира залыршахом\n" + "\t(\t(\n" +-"\t(_G)AWK\t(_G)AWK\n" ++"\tAWK\tAWK\n" + "\t('', 'KNYC', nothing)\t('', 'UUEE', nothing)\n" + "\t(%'d\t(%'d\n" + "\t(%s)\t(%s)\n" +diff -urN a/po-properties/am.po b/po-properties/am.po +--- a/po-properties/am.po 2025-06-09 19:54:59.157431084 -0700 ++++ b/po-properties/am.po 2025-06-09 20:11:48.352731577 -0700 +@@ -3527,7 +3527,7 @@ + #: gtk/gtkmenu.c:721 + #, fuzzy + msgid "Bottom Attach" +-msgstr "ወደ ታች (_B)" ++msgstr "ወደ ታች" + + #: gtk/gtkmenu.c:722 gtk/gtktable.c:214 + msgid "The row number to attach the bottom of the child to" +diff -urN a/po-properties/kn.po b/po-properties/kn.po +--- a/po-properties/kn.po 2025-06-09 19:54:59.317432656 -0700 ++++ b/po-properties/kn.po 2025-06-09 20:11:48.488733342 -0700 +@@ -215,27 +215,27 @@ + #: ../gdk/keyname-table.h:6867 + msgctxt "keyboard label" + msgid "KP_Home" +-msgstr "KP ನೆಲೆ (_H)" ++msgstr "KP ನೆಲೆ" + + #: ../gdk/keyname-table.h:6868 + msgctxt "keyboard label" + msgid "KP_Left" +-msgstr "KP ಎಡ (_L)" ++msgstr "KP ಎಡ" + + #: ../gdk/keyname-table.h:6869 + msgctxt "keyboard label" + msgid "KP_Up" +-msgstr "KP ಮೇಲೆ (_U)" ++msgstr "KP ಮೇಲೆ" + + #: ../gdk/keyname-table.h:6870 + msgctxt "keyboard label" + msgid "KP_Right" +-msgstr "KP ಬಲ (_R)" ++msgstr "KP ಬಲ" + + #: ../gdk/keyname-table.h:6871 + msgctxt "keyboard label" + msgid "KP_Down" +-msgstr "KP ಕೆಳಕ್ಕೆ (_D)" ++msgstr "KP ಕೆಳಕ್ಕೆ" + + #: ../gdk/keyname-table.h:6872 + msgctxt "keyboard label" +@@ -245,7 +245,7 @@ + #: ../gdk/keyname-table.h:6873 + msgctxt "keyboard label" + msgid "KP_Prior" +-msgstr "KP ಮೊದಲಿನ (_P)" ++msgstr "KP ಮೊದಲಿನ" + + #: ../gdk/keyname-table.h:6874 + msgctxt "keyboard label" +@@ -255,27 +255,27 @@ + #: ../gdk/keyname-table.h:6875 + msgctxt "keyboard label" + msgid "KP_Next" +-msgstr "KP ಮುಂದಿನ (_N)" ++msgstr "KP ಮುಂದಿನ" + + #: ../gdk/keyname-table.h:6876 + msgctxt "keyboard label" + msgid "KP_End" +-msgstr "KP ಕೊನೆ (_E)" ++msgstr "KP ಕೊನೆ" + + #: ../gdk/keyname-table.h:6877 + msgctxt "keyboard label" + msgid "KP_Begin" +-msgstr "KP ಆರಂಭಿಸು (_B)" ++msgstr "KP ಆರಂಭಿಸು" + + #: ../gdk/keyname-table.h:6878 + msgctxt "keyboard label" + msgid "KP_Insert" +-msgstr "KP ಸೇರಿಸು (_I)" ++msgstr "KP ಸೇರಿಸು" + + #: ../gdk/keyname-table.h:6879 + msgctxt "keyboard label" + msgid "KP_Delete" +-msgstr "KP ಅಳಿಸು (_D)" ++msgstr "KP ಅಳಿಸು" + + #: ../gdk/keyname-table.h:6880 + msgctxt "keyboard label" +@@ -581,17 +581,17 @@ + #: ../gtk/a11y/gtkimageaccessible.c:53 ../gtk/deprecated/gtkstock.c:340 + msgctxt "Stock label" + msgid "_About" +-msgstr "ಕುರಿತು (_A)" ++msgstr "ಕುರಿತು" + + #: ../gtk/a11y/gtkimageaccessible.c:54 ../gtk/deprecated/gtkstock.c:341 + msgctxt "Stock label" + msgid "_Add" +-msgstr "ಸೇರಿಸು (_A)" ++msgstr "ಸೇರಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:55 ../gtk/deprecated/gtkstock.c:343 + msgctxt "Stock label" + msgid "_Bold" +-msgstr "ಬೋಲ್ಡ್‍ (_B)" ++msgstr "ಬೋಲ್ಡ್‍" + + #: ../gtk/a11y/gtkimageaccessible.c:56 ../gtk/deprecated/gtkstock.c:345 + msgctxt "Stock label" +@@ -601,12 +601,12 @@ + #: ../gtk/a11y/gtkimageaccessible.c:57 ../gtk/deprecated/gtkstock.c:346 + msgctxt "Stock label" + msgid "_Clear" +-msgstr "ತೆರವುಗೊಳಿಸು (_C)" ++msgstr "ತೆರವುಗೊಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:58 ../gtk/deprecated/gtkstock.c:347 + msgctxt "Stock label" + msgid "_Close" +-msgstr "ಮುಚ್ಚು (_C)" ++msgstr "ಮುಚ್ಚು" + + #: ../gtk/a11y/gtkimageaccessible.c:59 ../gtk/gtkheaderbar.c:435 + msgid "Minimize" +@@ -623,7 +623,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:62 ../gtk/deprecated/gtkstock.c:350 + msgctxt "Stock label" + msgid "_Copy" +-msgstr "ಪ್ರತಿ ಮಾಡು (_C)" ++msgstr "ಪ್ರತಿ ಮಾಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:63 ../gtk/deprecated/gtkstock.c:351 + msgctxt "Stock label" +@@ -633,7 +633,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:64 ../gtk/deprecated/gtkstock.c:352 + msgctxt "Stock label" + msgid "_Delete" +-msgstr "ಅಳಿಸು (_D)" ++msgstr "ಅಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:65 ../gtk/deprecated/gtkstock.c:334 + msgctxt "Stock label" +@@ -659,95 +659,95 @@ + #: ../gtk/a11y/gtkimageaccessible.c:69 ../gtk/deprecated/gtkstock.c:355 + msgctxt "Stock label" + msgid "_Execute" +-msgstr "ಕಾರ್ಯಗತಗೊಳಿಸು (_E)" ++msgstr "ಕಾರ್ಯಗತಗೊಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:70 ../gtk/deprecated/gtkstock.c:357 + msgctxt "Stock label" + msgid "_File" +-msgstr "ಕಡತ (_F)" ++msgstr "ಕಡತ" + + #: ../gtk/a11y/gtkimageaccessible.c:71 ../gtk/deprecated/gtkstock.c:358 + msgctxt "Stock label" + msgid "_Find" +-msgstr "ಹುಡುಕು (_F)" ++msgstr "ಹುಡುಕು" + + #: ../gtk/a11y/gtkimageaccessible.c:72 ../gtk/deprecated/gtkstock.c:359 + msgctxt "Stock label" + msgid "Find and _Replace" +-msgstr "ಹುಡುಕು ಹಾಗು ಬದಲಾಯಿಸು (_R)" ++msgstr "ಹುಡುಕು ಹಾಗು ಬದಲಾಯಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:73 ../gtk/deprecated/gtkstock.c:360 + msgctxt "Stock label" + msgid "_Floppy" +-msgstr "ಫ್ಲಾಪಿ (_F)" ++msgstr "ಫ್ಲಾಪಿ" + + #: ../gtk/a11y/gtkimageaccessible.c:74 ../gtk/deprecated/gtkstock.c:361 + msgctxt "Stock label" + msgid "_Fullscreen" +-msgstr "ಪೂರ್ಣತೆರೆ (_F)" ++msgstr "ಪೂರ್ಣತೆರೆ" + + #. This is a navigation label as in "go to the bottom of the page" + #: ../gtk/a11y/gtkimageaccessible.c:75 ../gtk/deprecated/gtkstock.c:364 + msgctxt "Stock label, navigation" + msgid "_Bottom" +-msgstr "ಕೆಳಗೆ (_B)" ++msgstr "ಕೆಳಗೆ" + + #. This is a navigation label as in "go to the first page" + #: ../gtk/a11y/gtkimageaccessible.c:76 ../gtk/deprecated/gtkstock.c:366 + msgctxt "Stock label, navigation" + msgid "_First" +-msgstr "ಮೊದಲಿನ (_F)" ++msgstr "ಮೊದಲಿನ" + + #. This is a navigation label as in "go to the last page" + #: ../gtk/a11y/gtkimageaccessible.c:77 ../gtk/deprecated/gtkstock.c:368 + msgctxt "Stock label, navigation" + msgid "_Last" +-msgstr "ಕೊನೆಯ (_L)" ++msgstr "ಕೊನೆಯ" + + #. This is a navigation label as in "go to the top of the page" + #: ../gtk/a11y/gtkimageaccessible.c:78 ../gtk/deprecated/gtkstock.c:370 + msgctxt "Stock label, navigation" + msgid "_Top" +-msgstr "ಮೇಲಕ್ಕೆ (_T)" ++msgstr "ಮೇಲಕ್ಕೆ" + + #. This is a navigation label as in "go back" + #: ../gtk/a11y/gtkimageaccessible.c:79 ../gtk/deprecated/gtkstock.c:372 + msgctxt "Stock label, navigation" + msgid "_Back" +-msgstr "ಹಿಂದಕ್ಕೆ (_B)" ++msgstr "ಹಿಂದಕ್ಕೆ" + + #. This is a navigation label as in "go down" + #: ../gtk/a11y/gtkimageaccessible.c:80 ../gtk/deprecated/gtkstock.c:374 + msgctxt "Stock label, navigation" + msgid "_Down" +-msgstr "ಕೆಳಕ್ಕೆ (_D)" ++msgstr "ಕೆಳಕ್ಕೆ" + + #. This is a navigation label as in "go forward" + #: ../gtk/a11y/gtkimageaccessible.c:81 ../gtk/deprecated/gtkstock.c:376 + msgctxt "Stock label, navigation" + msgid "_Forward" +-msgstr "ಮುಂದಕ್ಕೆ (_F)" ++msgstr "ಮುಂದಕ್ಕೆ" + + #. This is a navigation label as in "go up" + #: ../gtk/a11y/gtkimageaccessible.c:82 ../gtk/deprecated/gtkstock.c:378 + msgctxt "Stock label, navigation" + msgid "_Up" +-msgstr "ಮೇಲಕ್ಕೆ (_U)" ++msgstr "ಮೇಲಕ್ಕೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:83 ../gtk/deprecated/gtkstock.c:379 + msgctxt "Stock label" + msgid "_Hard Disk" +-msgstr "ಹಾರ್ಡ್ ಡಿಸ್ಕ್‍ (_H)" ++msgstr "ಹಾರ್ಡ್ ಡಿಸ್ಕ್‍" + + #: ../gtk/a11y/gtkimageaccessible.c:84 ../gtk/deprecated/gtkstock.c:380 + msgctxt "Stock label" + msgid "_Help" +-msgstr "ಸಹಾಯ (_H)" ++msgstr "ಸಹಾಯ" + + #: ../gtk/a11y/gtkimageaccessible.c:85 ../gtk/deprecated/gtkstock.c:381 + msgctxt "Stock label" + msgid "_Home" +-msgstr "ನೆಲೆ (_H)" ++msgstr "ನೆಲೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:86 ../gtk/deprecated/gtkstock.c:382 + msgctxt "Stock label" +@@ -757,58 +757,58 @@ + #: ../gtk/a11y/gtkimageaccessible.c:87 ../gtk/deprecated/gtkstock.c:385 + msgctxt "Stock label" + msgid "_Information" +-msgstr "ಮಾಹಿತಿ (_I)" ++msgstr "ಮಾಹಿತಿ" + + #: ../gtk/a11y/gtkimageaccessible.c:88 ../gtk/deprecated/gtkstock.c:386 + msgctxt "Stock label" + msgid "_Italic" +-msgstr "ಇಟಾಲಿಕ್ (_I)" ++msgstr "ಇಟಾಲಿಕ್" + + #: ../gtk/a11y/gtkimageaccessible.c:89 ../gtk/deprecated/gtkstock.c:387 + msgctxt "Stock label" + msgid "_Jump to" +-msgstr "ಇಲ್ಲಿಗೆ ತೆರಳು (_J)" ++msgstr "ಇಲ್ಲಿಗೆ ತೆರಳು" + + #. This is about text justification, "centered text" + #: ../gtk/a11y/gtkimageaccessible.c:90 ../gtk/deprecated/gtkstock.c:389 + msgctxt "Stock label" + msgid "_Center" +-msgstr "ಮಧ್ಯ (_C)" ++msgstr "ಮಧ್ಯ" + + #. This is about text justification + #: ../gtk/a11y/gtkimageaccessible.c:91 ../gtk/deprecated/gtkstock.c:391 + msgctxt "Stock label" + msgid "_Fill" +-msgstr "ತುಂಬಿಸು (_F)" ++msgstr "ತುಂಬಿಸು" + + #. This is about text justification, "left-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:92 ../gtk/deprecated/gtkstock.c:393 + msgctxt "Stock label" + msgid "_Left" +-msgstr "ಎಡ (_L):" ++msgstr "ಎಡ:" + + #. This is about text justification, "right-justified text" + #: ../gtk/a11y/gtkimageaccessible.c:93 ../gtk/deprecated/gtkstock.c:395 + msgctxt "Stock label" + msgid "_Right" +-msgstr "ಬಲ (_R):" ++msgstr "ಬಲ:" + + #: ../gtk/a11y/gtkimageaccessible.c:94 ../gtk/deprecated/gtkstock.c:362 + msgctxt "Stock label" + msgid "_Leave Fullscreen" +-msgstr "ಪೂರ್ಣತೆರೆಯಿಂದ ನಿರ್ಗಮಿಸು (_L)" ++msgstr "ಪೂರ್ಣತೆರೆಯಿಂದ ನಿರ್ಗಮಿಸು" + + #. Media label, as in "fast forward" + #: ../gtk/a11y/gtkimageaccessible.c:95 ../gtk/deprecated/gtkstock.c:398 + msgctxt "Stock label, media" + msgid "_Forward" +-msgstr "ಮುಂದಕ್ಕೆ (_F)" ++msgstr "ಮುಂದಕ್ಕೆ" + + #. Media label, as in "next song" + #: ../gtk/a11y/gtkimageaccessible.c:96 ../gtk/deprecated/gtkstock.c:400 + msgctxt "Stock label, media" + msgid "_Next" +-msgstr "ಮುಂದಿನ (_N)" ++msgstr "ಮುಂದಿನ" + + #. Media label, as in "pause music" + #: ../gtk/a11y/gtkimageaccessible.c:97 ../gtk/deprecated/gtkstock.c:402 +@@ -820,7 +820,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:98 ../gtk/deprecated/gtkstock.c:404 + msgctxt "Stock label, media" + msgid "_Play" +-msgstr "ಚಲಾಯಿಸು (_P)" ++msgstr "ಚಲಾಯಿಸು" + + #. Media label, as in "previous song" + #: ../gtk/a11y/gtkimageaccessible.c:99 ../gtk/deprecated/gtkstock.c:406 +@@ -832,7 +832,7 @@ + #: ../gtk/a11y/gtkimageaccessible.c:100 ../gtk/deprecated/gtkstock.c:408 + msgctxt "Stock label, media" + msgid "_Record" +-msgstr "ರೆಕಾರ್ಡು ಮಾಡು (_R)" ++msgstr "ರೆಕಾರ್ಡು ಮಾಡು" + + #. Media label + #: ../gtk/a11y/gtkimageaccessible.c:101 ../gtk/deprecated/gtkstock.c:410 +@@ -844,32 +844,32 @@ + #: ../gtk/a11y/gtkimageaccessible.c:102 ../gtk/deprecated/gtkstock.c:412 + msgctxt "Stock label, media" + msgid "_Stop" +-msgstr "ನಿಲ್ಲಿಸು (_S)" ++msgstr "ನಿಲ್ಲಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:103 ../gtk/deprecated/gtkstock.c:413 + msgctxt "Stock label" + msgid "_Network" +-msgstr "ಜಾಲಬಂಧ (_N)" ++msgstr "ಜಾಲಬಂಧ" + + #: ../gtk/a11y/gtkimageaccessible.c:104 ../gtk/deprecated/gtkstock.c:414 + msgctxt "Stock label" + msgid "_New" +-msgstr "ಹೊಸ (_N)" ++msgstr "ಹೊಸ" + + #: ../gtk/a11y/gtkimageaccessible.c:105 ../gtk/deprecated/gtkstock.c:417 + msgctxt "Stock label" + msgid "_Open" +-msgstr "ತೆರೆ (_O)" ++msgstr "ತೆರೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:106 ../gtk/deprecated/gtkstock.c:427 + msgctxt "Stock label" + msgid "_Paste" +-msgstr "ಅಂಟಿಸು (_P)" ++msgstr "ಅಂಟಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:107 ../gtk/deprecated/gtkstock.c:429 + msgctxt "Stock label" + msgid "_Print" +-msgstr "ಮುದ್ರಿಸು (_P)" ++msgstr "ಮುದ್ರಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:108 ../gtk/deprecated/gtkstock.c:430 + msgctxt "Stock label" +@@ -879,86 +879,86 @@ + #: ../gtk/a11y/gtkimageaccessible.c:109 ../gtk/deprecated/gtkstock.c:431 + msgctxt "Stock label" + msgid "_Properties" +-msgstr "ಗುಣಲಕ್ಷಣಗಳು (_P)" ++msgstr "ಗುಣಲಕ್ಷಣಗಳು" + + #: ../gtk/a11y/gtkimageaccessible.c:110 ../gtk/deprecated/gtkstock.c:432 + msgctxt "Stock label" + msgid "_Quit" +-msgstr "ಬಿಟ್ಟು ಬಿಡು (_Q)" ++msgstr "ಬಿಟ್ಟು ಬಿಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:111 ../gtk/deprecated/gtkstock.c:433 + msgctxt "Stock label" + msgid "_Redo" +-msgstr "ಪುನಃ ಮಾಡು (_R)" ++msgstr "ಪುನಃ ಮಾಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:112 ../gtk/deprecated/gtkstock.c:434 + msgctxt "Stock label" + msgid "_Refresh" +-msgstr "ಪುನಶ್ಚೇತನಗೊಳಿಸು (_R)" ++msgstr "ಪುನಶ್ಚೇತನಗೊಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:113 ../gtk/deprecated/gtkstock.c:435 + msgctxt "Stock label" + msgid "_Remove" +-msgstr "ತೆಗೆದು ಹಾಕು (_R)" ++msgstr "ತೆಗೆದು ಹಾಕು" + + #: ../gtk/a11y/gtkimageaccessible.c:114 ../gtk/deprecated/gtkstock.c:436 + msgctxt "Stock label" + msgid "_Revert" +-msgstr "ಹಿಮ್ಮರಳಿಸು (_R)" ++msgstr "ಹಿಮ್ಮರಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:115 ../gtk/deprecated/gtkstock.c:437 + msgctxt "Stock label" + msgid "_Save" +-msgstr "ಉಳಿಸು (_S)" ++msgstr "ಉಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:116 ../gtk/deprecated/gtkstock.c:438 + msgctxt "Stock label" + msgid "Save _As" +-msgstr "ಹೀಗೆ ಉಳಿಸು (_A)" ++msgstr "ಹೀಗೆ ಉಳಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:117 ../gtk/deprecated/gtkstock.c:439 + msgctxt "Stock label" + msgid "Select _All" +-msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು (_A)" ++msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:118 ../gtk/deprecated/gtkstock.c:443 + msgctxt "Stock label" + msgid "_Ascending" +-msgstr "ಏರಿಕೆ ಕ್ರಮ (_A)" ++msgstr "ಏರಿಕೆ ಕ್ರಮ" + + #. Sorting direction + #: ../gtk/a11y/gtkimageaccessible.c:119 ../gtk/deprecated/gtkstock.c:445 + msgctxt "Stock label" + msgid "_Descending" +-msgstr "ಇಳಿಕೆಕ್ರಮ (_D)" ++msgstr "ಇಳಿಕೆಕ್ರಮ" + + #: ../gtk/a11y/gtkimageaccessible.c:120 ../gtk/deprecated/gtkstock.c:446 + msgctxt "Stock label" + msgid "_Spell Check" +-msgstr "ಕಾಗುಣಿತ ಪರಿಶೀಲನೆ (_S)" ++msgstr "ಕಾಗುಣಿತ ಪರಿಶೀಲನೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:121 ../gtk/deprecated/gtkstock.c:447 + msgctxt "Stock label" + msgid "_Stop" +-msgstr "ನಿಲ್ಲು (_S)" ++msgstr "ನಿಲ್ಲು" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:122 ../gtk/deprecated/gtkstock.c:449 + msgctxt "Stock label" + msgid "_Strikethrough" +-msgstr "ಅಡ್ಡಗೆರೆ (_S)" ++msgstr "ಅಡ್ಡಗೆರೆ" + + #. Font variant + #: ../gtk/a11y/gtkimageaccessible.c:123 ../gtk/deprecated/gtkstock.c:452 + msgctxt "Stock label" + msgid "_Underline" +-msgstr "ಅಡಿಗೆರೆ (_U)" ++msgstr "ಅಡಿಗೆರೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:124 ../gtk/deprecated/gtkstock.c:453 + msgctxt "Stock label" + msgid "_Undo" +-msgstr "ರದ್ದು ಮಾಡು (_U)" ++msgstr "ರದ್ದು ಮಾಡು" + + #: ../gtk/a11y/gtkimageaccessible.c:125 ../gtk/deprecated/gtkstock.c:383 + msgctxt "Stock label" +@@ -969,23 +969,23 @@ + #: ../gtk/a11y/gtkimageaccessible.c:126 ../gtk/deprecated/gtkstock.c:456 + msgctxt "Stock label" + msgid "_Normal Size" +-msgstr "ಸಾಮಾನ್ಯ ಗಾತ್ರ (_N)" ++msgstr "ಸಾಮಾನ್ಯ ಗಾತ್ರ" + + #. Zoom + #: ../gtk/a11y/gtkimageaccessible.c:127 ../gtk/deprecated/gtkstock.c:458 + msgctxt "Stock label" + msgid "Best _Fit" +-msgstr "ಸರಿಯಾಗಿ ಹೊಂದಿಕೆ (_F)" ++msgstr "ಸರಿಯಾಗಿ ಹೊಂದಿಕೆ" + + #: ../gtk/a11y/gtkimageaccessible.c:128 ../gtk/deprecated/gtkstock.c:459 + msgctxt "Stock label" + msgid "Zoom _In" +-msgstr "ಹಿಗ್ಗಿಸು (_I)" ++msgstr "ಹಿಗ್ಗಿಸು" + + #: ../gtk/a11y/gtkimageaccessible.c:129 ../gtk/deprecated/gtkstock.c:460 + msgctxt "Stock label" + msgid "Zoom _Out" +-msgstr "ಕುಗ್ಗಿಸು (_O)" ++msgstr "ಕುಗ್ಗಿಸು" + + #: ../gtk/a11y/gtkmenuitemaccessible.c:445 + msgctxt "Action description" +@@ -1046,7 +1046,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:459 + msgid "_Hue:" +-msgstr "ವರ್ಣಛಾಯೆ (_H):" ++msgstr "ವರ್ಣಛಾಯೆ:" + + #: ../gtk/deprecated/gtkcolorsel.c:460 + msgid "Position on the color wheel." +@@ -1062,7 +1062,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:464 + msgid "_Value:" +-msgstr "ಮೌಲ್ಯ (_V):" ++msgstr "ಮೌಲ್ಯ:" + + #: ../gtk/deprecated/gtkcolorsel.c:465 + msgid "Brightness of the color." +@@ -1070,7 +1070,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:466 + msgid "_Red:" +-msgstr "ಕೆಂಪು (_R):" ++msgstr "ಕೆಂಪು:" + + #: ../gtk/deprecated/gtkcolorsel.c:467 + msgid "Amount of red light in the color." +@@ -1078,7 +1078,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:468 + msgid "_Green:" +-msgstr "ಹಸಿರು (_G):" ++msgstr "ಹಸಿರು:" + + #: ../gtk/deprecated/gtkcolorsel.c:469 + msgid "Amount of green light in the color." +@@ -1086,7 +1086,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:470 + msgid "_Blue:" +-msgstr "ನೀಲಿ (_B):" ++msgstr "ನೀಲಿ:" + + #: ../gtk/deprecated/gtkcolorsel.c:471 + msgid "Amount of blue light in the color." +@@ -1115,7 +1115,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:546 + msgid "_Palette:" +-msgstr "ವರ್ಣಫಲಕ (_P):" ++msgstr "ವರ್ಣಫಲಕ:" + + #: ../gtk/deprecated/gtkcolorsel.c:576 + msgid "Color Wheel" +@@ -1154,7 +1154,7 @@ + + #: ../gtk/deprecated/gtkcolorsel.c:1490 + msgid "_Save color here" +-msgstr "ಬಣ್ಣವನ್ನು ಇಲ್ಲಿ ಉಳಿಸು (_S)" ++msgstr "ಬಣ್ಣವನ್ನು ಇಲ್ಲಿ ಉಳಿಸು" + + #: ../gtk/deprecated/gtkcolorsel.c:1694 + msgid "" +@@ -1180,7 +1180,7 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:2 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:2 + msgid "_Cancel" +-msgstr "ರದ್ದುಗೊಳಿಸು (_C)" ++msgstr "ರದ್ದುಗೊಳಿಸು" + + #: ../gtk/deprecated/gtkcolorseldialog.c:195 + #: ../gtk/gtkprinteroptionwidget.c:546 +@@ -1188,11 +1188,11 @@ + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:3 + #: ../gtk/resources/ui/gtkfontchooserdialog.ui.h:3 + msgid "_Select" +-msgstr "ಆರಿಸು (_S)" ++msgstr "ಆರಿಸು" + + #: ../gtk/deprecated/gtkcolorseldialog.c:201 + msgid "_Help" +-msgstr "ನೆರವು (_H)" ++msgstr "ನೆರವು" + + #: ../gtk/deprecated/gtkcolorseldialog.c:213 + msgid "Color Selection" +@@ -1206,11 +1206,11 @@ + + #: ../gtk/deprecated/gtkfontsel.c:386 + msgid "_Family:" +-msgstr "ಪರಿವಾರ (_F):" ++msgstr "ಪರಿವಾರ:" + + #: ../gtk/deprecated/gtkfontsel.c:393 + msgid "_Style:" +-msgstr "ಶೈಲಿ (_S):" ++msgstr "ಶೈಲಿ:" + + #: ../gtk/deprecated/gtkfontsel.c:400 + msgid "Si_ze:" +@@ -1219,18 +1219,18 @@ + #. create the text entry widget + #: ../gtk/deprecated/gtkfontsel.c:577 + msgid "_Preview:" +-msgstr "ಮುನ್ನೋಟ (_P):" ++msgstr "ಮುನ್ನೋಟ:" + + #: ../gtk/deprecated/gtkfontsel.c:1693 ../gtk/gtkpagesetupunixdialog.c:197 + #: ../gtk/resources/ui/gtkassistant.ui.h:1 + msgid "_Apply" +-msgstr "ಅನ್ವಯಿಸು (_A)" ++msgstr "ಅನ್ವಯಿಸು" + + #: ../gtk/deprecated/gtkfontsel.c:1698 ../gtk/gtkmessagedialog.c:936 + #: ../gtk/gtkmessagedialog.c:958 ../gtk/gtkprintbackend.c:764 + #: ../gtk/gtkwindow.c:11653 ../gtk/inspector/classes-list.c:125 + msgid "_OK" +-msgstr "ಸರಿ (_O)" ++msgstr "ಸರಿ" + + #: ../gtk/deprecated/gtkfontsel.c:1709 + msgid "Font Selection" +@@ -1248,12 +1248,12 @@ + #: ../gtk/deprecated/gtkstock.c:342 + msgctxt "Stock label" + msgid "_Apply" +-msgstr "ಅನ್ವಯಿಸು (_A)" ++msgstr "ಅನ್ವಯಿಸು" + + #: ../gtk/deprecated/gtkstock.c:344 + msgctxt "Stock label" + msgid "_Cancel" +-msgstr "ರದ್ದು ಮಾಡು (_C)" ++msgstr "ರದ್ದು ಮಾಡು" + + #: ../gtk/deprecated/gtkstock.c:348 + msgctxt "Stock label" +@@ -1263,37 +1263,37 @@ + #: ../gtk/deprecated/gtkstock.c:349 + msgctxt "Stock label" + msgid "_Convert" +-msgstr "ಮಾರ್ಪಡಿಸು (_C)" ++msgstr "ಮಾರ್ಪಡಿಸು" + + #: ../gtk/deprecated/gtkstock.c:353 + msgctxt "Stock label" + msgid "_Discard" +-msgstr "ತಿರಸ್ಕರಿಸು (_D)" ++msgstr "ತಿರಸ್ಕರಿಸು" + + #: ../gtk/deprecated/gtkstock.c:354 + msgctxt "Stock label" + msgid "_Disconnect" +-msgstr "ಸಂಪರ್ಕ ಕಡಿದುಹಾಕು (_D)" ++msgstr "ಸಂಪರ್ಕ ಕಡಿದುಹಾಕು" + + #: ../gtk/deprecated/gtkstock.c:356 + msgctxt "Stock label" + msgid "_Edit" +-msgstr "ಸಂಪಾದನೆ (_E)" ++msgstr "ಸಂಪಾದನೆ" + + #: ../gtk/deprecated/gtkstock.c:384 + msgctxt "Stock label" + msgid "_Index" +-msgstr "ಸೂಚಿ (_I)" ++msgstr "ಸೂಚಿ" + + #: ../gtk/deprecated/gtkstock.c:415 + msgctxt "Stock label" + msgid "_No" +-msgstr "ಇಲ್ಲ (_N)" ++msgstr "ಇಲ್ಲ" + + #: ../gtk/deprecated/gtkstock.c:416 + msgctxt "Stock label" + msgid "_OK" +-msgstr "ಸರಿ (_O)" ++msgstr "ಸರಿ" + + #. Page orientation + #: ../gtk/deprecated/gtkstock.c:419 +@@ -1327,27 +1327,27 @@ + #: ../gtk/deprecated/gtkstock.c:428 + msgctxt "Stock label" + msgid "_Preferences" +-msgstr "ಆದ್ಯತೆಗಳು (_P)" ++msgstr "ಆದ್ಯತೆಗಳು" + + #: ../gtk/deprecated/gtkstock.c:440 + msgctxt "Stock label" + msgid "_Color" +-msgstr "ಬಣ್ಣ (_C)" ++msgstr "ಬಣ್ಣ" + + #: ../gtk/deprecated/gtkstock.c:441 + msgctxt "Stock label" + msgid "_Font" +-msgstr "ಅಕ್ಷರ ಶೈಲಿ (_F)" ++msgstr "ಅಕ್ಷರ ಶೈಲಿ" + + #: ../gtk/deprecated/gtkstock.c:450 + msgctxt "Stock label" + msgid "_Undelete" +-msgstr "ಅಳಿಸಬೇಡ (_U)" ++msgstr "ಅಳಿಸಬೇಡ" + + #: ../gtk/deprecated/gtkstock.c:454 + msgctxt "Stock label" + msgid "_Yes" +-msgstr "ಹೌದು (_Y)" ++msgstr "ಹೌದು" + + #: ../gtk/deprecated/gtkuimanager.c:1779 + #, c-format +@@ -2011,7 +2011,7 @@ + + #: ../gtk/gtkcolorswatch.c:483 + msgid "_Customize" +-msgstr "ಅಗತ್ಯಾನುಗುಣಗೊಳಿಸು (_C)" ++msgstr "ಅಗತ್ಯಾನುಗುಣಗೊಳಿಸು" + + #. Translate to the default units to use for presenting + #. * lengths to the user. Translate to default:inch if you +@@ -2026,7 +2026,7 @@ + #: ../gtk/gtkcustompaperunixdialog.c:329 ../gtk/gtkmessagedialog.c:940 + #: ../gtk/resources/ui/gtkassistant.ui.h:6 + msgid "_Close" +-msgstr "ಮುಚ್ಚು (_C)" ++msgstr "ಮುಚ್ಚು" + + #. And show the custom paper dialog + #: ../gtk/gtkcustompaperunixdialog.c:405 ../gtk/gtkprintunixdialog.c:3305 +@@ -2052,11 +2052,11 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1120 + msgid "_Width:" +-msgstr "ಅಗಲ (_W):" ++msgstr "ಅಗಲ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1131 + msgid "_Height:" +-msgstr "ಎತ್ತರ (_H):" ++msgstr "ಎತ್ತರ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1142 + msgid "Paper Size" +@@ -2064,19 +2064,19 @@ + + #: ../gtk/gtkcustompaperunixdialog.c:1151 + msgid "_Top:" +-msgstr "ಮೇಲೆ (_T):" ++msgstr "ಮೇಲೆ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1162 + msgid "_Bottom:" +-msgstr "ಕೆಳಗೆ (_B):" ++msgstr "ಕೆಳಗೆ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1173 + msgid "_Left:" +-msgstr "ಎಡ (_L):" ++msgstr "ಎಡ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1184 + msgid "_Right:" +-msgstr "ಬಲ (_R):" ++msgstr "ಬಲ:" + + #: ../gtk/gtkcustompaperunixdialog.c:1223 + msgid "Paper Margins" +@@ -2090,20 +2090,20 @@ + #: ../gtk/gtkentry.c:9579 ../gtk/gtkentry.c:9731 ../gtk/gtklabel.c:6531 + #: ../gtk/gtktextview.c:8845 ../gtk/gtktextview.c:9033 + msgid "_Copy" +-msgstr "ಪ್ರತಿ ಮಾಡು (_C)" ++msgstr "ಪ್ರತಿ ಮಾಡು" + + #: ../gtk/gtkentry.c:9583 ../gtk/gtkentry.c:9734 ../gtk/gtklabel.c:6532 + #: ../gtk/gtktextview.c:8847 ../gtk/gtktextview.c:9035 + msgid "_Paste" +-msgstr "ಅಂಟಿಸು (_P)" ++msgstr "ಅಂಟಿಸು" + + #: ../gtk/gtkentry.c:9586 ../gtk/gtklabel.c:6534 ../gtk/gtktextview.c:8850 + msgid "_Delete" +-msgstr "ಅಳಿಸು (_D)" ++msgstr "ಅಳಿಸು" + + #: ../gtk/gtkentry.c:9597 ../gtk/gtklabel.c:6543 ../gtk/gtktextview.c:8864 + msgid "Select _All" +-msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು (_A)" ++msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು" + + #: ../gtk/gtkentry.c:10789 + msgid "Caps Lock is on" +@@ -2124,7 +2124,7 @@ + + #: ../gtk/gtkfilechooserbutton.c:795 ../gtk/gtkplacessidebar.c:3273 + msgid "_Open" +-msgstr "ತೆರೆ (_O)" ++msgstr "ತೆರೆ" + + #: ../gtk/gtkfilechooserbutton.c:2139 + msgid "Other…" +@@ -2196,28 +2196,28 @@ + + #: ../gtk/gtkfilechooserwidget.c:1665 + msgid "_Visit File" +-msgstr "ಕಡತಕ್ಕೆ ಹೋಗು (_V)" ++msgstr "ಕಡತಕ್ಕೆ ಹೋಗು" + + #: ../gtk/gtkfilechooserwidget.c:1668 + msgid "_Copy Location" +-msgstr "ಪ್ರತಿ ಮಾಡುವ ಸ್ಥಳ (_L)" ++msgstr "ಪ್ರತಿ ಮಾಡುವ ಸ್ಥಳ" + + #: ../gtk/gtkfilechooserwidget.c:1671 + msgid "_Add to Bookmarks" +-msgstr "ಪುಟಗುರುತಿಗೆ ಸೇರಿಸು (_A)" ++msgstr "ಪುಟಗುರುತಿಗೆ ಸೇರಿಸು" + + #: ../gtk/gtkfilechooserwidget.c:1678 + msgid "Show _Hidden Files" +-msgstr "ಗೌಪ್ಯವಾಗಿರಸಲಾದ ಕಡತಗಳನ್ನು ತೋರಿಸು (_H)" ++msgstr "ಗೌಪ್ಯವಾಗಿರಸಲಾದ ಕಡತಗಳನ್ನು ತೋರಿಸು" + + #: ../gtk/gtkfilechooserwidget.c:1681 + msgid "Show _Size Column" +-msgstr "ಗಾತ್ರದ ಉದ್ದಸಾಲನ್ನು ತೋರಿಸು (_S)" ++msgstr "ಗಾತ್ರದ ಉದ್ದಸಾಲನ್ನು ತೋರಿಸು" + + #. Label + #: ../gtk/gtkfilechooserwidget.c:1973 + msgid "_Name:" +-msgstr "ಹೆಸರು (_N):" ++msgstr "ಹೆಸರು:" + + #: ../gtk/gtkfilechooserwidget.c:3648 + #, c-format +@@ -2270,7 +2270,7 @@ + + #: ../gtk/gtkfilechooserwidget.c:5227 ../gtk/gtkprintunixdialog.c:668 + msgid "_Replace" +-msgstr "ಬದಲಿ ಮಾಡು (_R)" ++msgstr "ಬದಲಿ ಮಾಡು" + + #: ../gtk/gtkfilechooserwidget.c:6046 + msgid "Could not start the search process" +@@ -2370,12 +2370,12 @@ + #. Open Link + #: ../gtk/gtklabel.c:6511 + msgid "_Open Link" +-msgstr "ಕೊಂಡಿಯನ್ನು ತೆರೆ (_O)" ++msgstr "ಕೊಂಡಿಯನ್ನು ತೆರೆ" + + #. Copy Link Address + #: ../gtk/gtklabel.c:6520 + msgid "Copy _Link Address" +-msgstr "ಕೊಂಡಿ ವಿಳಾಸವನ್ನು ಪ್ರತಿ ಮಾಡು (_L)" ++msgstr "ಕೊಂಡಿ ವಿಳಾಸವನ್ನು ಪ್ರತಿ ಮಾಡು" + + #: ../gtk/gtk-launch.c:71 + msgid "APPLICATION [URI…] — launch an APPLICATION with URI." +@@ -2521,11 +2521,11 @@ + + #: ../gtk/gtkmessagedialog.c:948 + msgid "_No" +-msgstr "ಇಲ್ಲ (_N)" ++msgstr "ಇಲ್ಲ" + + #: ../gtk/gtkmessagedialog.c:949 + msgid "_Yes" +-msgstr "ಹೌದು (_Y)" ++msgstr "ಹೌದು" + + #: ../gtk/gtkmountoperation.c:544 + msgid "Co_nnect" +@@ -2537,7 +2537,7 @@ + + #: ../gtk/gtkmountoperation.c:629 + msgid "_Anonymous" +-msgstr "ಅನಾಮಿಕ (_A)" ++msgstr "ಅನಾಮಿಕ" + + #: ../gtk/gtkmountoperation.c:638 + msgid "Registered U_ser" +@@ -2545,27 +2545,27 @@ + + #: ../gtk/gtkmountoperation.c:649 + msgid "_Username" +-msgstr "ಬಳಕೆದಾರ ಹೆಸರು (_U)" ++msgstr "ಬಳಕೆದಾರ ಹೆಸರು" + + #: ../gtk/gtkmountoperation.c:654 + msgid "_Domain" +-msgstr "ಡೊಮೇನ್ (_D)" ++msgstr "ಡೊಮೇನ್" + + #: ../gtk/gtkmountoperation.c:660 + msgid "_Password" +-msgstr "ಗುಪ್ತಪದ (_P)" ++msgstr "ಗುಪ್ತಪದ" + + #: ../gtk/gtkmountoperation.c:682 + msgid "Forget password _immediately" +-msgstr "ಗುಪ್ತಪದವನ್ನು ತಕ್ಷಣ ಮರೆತು ಬಿಡು (_F)" ++msgstr "ಗುಪ್ತಪದವನ್ನು ತಕ್ಷಣ ಮರೆತು ಬಿಡು" + + #: ../gtk/gtkmountoperation.c:692 + msgid "Remember password until you _logout" +-msgstr "ಗುಪ್ತಪದವನ್ನು ನೀವು ನಿರ್ಗಮಿಸುವ ತನಕ ನೆನಪಿನಲ್ಲಿಡಿ (_R)" ++msgstr "ಗುಪ್ತಪದವನ್ನು ನೀವು ನಿರ್ಗಮಿಸುವ ತನಕ ನೆನಪಿನಲ್ಲಿಡಿ" + + #: ../gtk/gtkmountoperation.c:702 + msgid "Remember _forever" +-msgstr "ಸದಾ ನೆನಪಿನಲ್ಲಿಡು (_R)" ++msgstr "ಸದಾ ನೆನಪಿನಲ್ಲಿಡು" + + #: ../gtk/gtkmountoperation.c:1091 + #, c-format +@@ -2578,7 +2578,7 @@ + + #: ../gtk/gtkmountoperation.c:1313 + msgid "_End Process" +-msgstr "ಪ್ರಕ್ರಿಯೆಯನ್ನು ಕೊನೆಗೊಳಿಸು (_E)" ++msgstr "ಪ್ರಕ್ರಿಯೆಯನ್ನು ಕೊನೆಗೊಳಿಸು" + + #: ../gtk/gtkmountoperation-stub.c:62 + #, c-format +@@ -2741,45 +2741,45 @@ + #. Adjust start/stop items to reflect the type of the drive + #: ../gtk/gtkplacessidebar.c:2230 ../gtk/gtkplacessidebar.c:3351 + msgid "_Start" +-msgstr "ಆರಂಭಿಸು (_S)" ++msgstr "ಆರಂಭಿಸು" + + #: ../gtk/gtkplacessidebar.c:2231 ../gtk/gtkplacessidebar.c:3358 + msgid "_Stop" +-msgstr "ನಿಲ್ಲಿಸು (_S)" ++msgstr "ನಿಲ್ಲಿಸು" + + #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used + #: ../gtk/gtkplacessidebar.c:2238 + msgid "_Power On" +-msgstr "ಚಾಲನೆಗೊಳಿಸು (_P)" ++msgstr "ಚಾಲನೆಗೊಳಿಸು" + + #: ../gtk/gtkplacessidebar.c:2239 + msgid "_Safely Remove Drive" +-msgstr "ಡ್ರೈವ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ತೆಗೆದುಹಾಕು (_S)" ++msgstr "ಡ್ರೈವ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ತೆಗೆದುಹಾಕು" + + #: ../gtk/gtkplacessidebar.c:2243 + msgid "_Connect Drive" +-msgstr "ಡ್ರೈವ್ ಅನ್ನು ಜೋಡಿಸು (_C)" ++msgstr "ಡ್ರೈವ್ ಅನ್ನು ಜೋಡಿಸು" + + #: ../gtk/gtkplacessidebar.c:2244 + msgid "_Disconnect Drive" +-msgstr "ಡ್ರೈವ್‌ ಸಂಪರ್ಕತಪ್ಪಿಸು (_D)" ++msgstr "ಡ್ರೈವ್‌ ಸಂಪರ್ಕತಪ್ಪಿಸು" + + #: ../gtk/gtkplacessidebar.c:2248 + msgid "_Start Multi-disk Device" +-msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ಆರಂಭಿಸು (_S)" ++msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ಆರಂಭಿಸು" + + #: ../gtk/gtkplacessidebar.c:2249 + msgid "_Stop Multi-disk Device" +-msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ನಿಲ್ಲಿಸು (_S)" ++msgstr "ಬಹು-ಡಿಸ್ಕ್ ಸಾಧನವನ್ನು ನಿಲ್ಲಿಸು" + + #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used + #: ../gtk/gtkplacessidebar.c:2254 + msgid "_Unlock Drive" +-msgstr "ಡ್ರೈವ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡು (_U)" ++msgstr "ಡ್ರೈವ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡು" + + #: ../gtk/gtkplacessidebar.c:2255 + msgid "_Lock Drive" +-msgstr "ಡ್ರೈವ್‌ ಅನ್ನು ಲಾಕ್ ಮಾಡು (_L)" ++msgstr "ಡ್ರೈವ್‌ ಅನ್ನು ಲಾಕ್ ಮಾಡು" + + #: ../gtk/gtkplacessidebar.c:2284 ../gtk/gtkplacessidebar.c:3033 + #, c-format +@@ -2814,15 +2814,15 @@ + + #: ../gtk/gtkplacessidebar.c:3281 + msgid "Open in New _Tab" +-msgstr "ಹೊಸ ಟ್ಯಾಬ್‌ನಲ್ಲಿ ತೆರೆ (_T)" ++msgstr "ಹೊಸ ಟ್ಯಾಬ್‌ನಲ್ಲಿ ತೆರೆ" + + #: ../gtk/gtkplacessidebar.c:3290 + msgid "Open in New _Window" +-msgstr "ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ (_W)" ++msgstr "ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ" + + #: ../gtk/gtkplacessidebar.c:3299 + msgid "_Add Bookmark" +-msgstr "ಪುಟಗುರುತನ್ನು ಸೇರಿಸು (_A)" ++msgstr "ಪುಟಗುರುತನ್ನು ಸೇರಿಸು" + + #: ../gtk/gtkplacessidebar.c:3305 + msgid "Remove" +@@ -2834,19 +2834,19 @@ + + #: ../gtk/gtkplacessidebar.c:3323 + msgid "_Mount" +-msgstr "ಏರಿಸು (_M)" ++msgstr "ಏರಿಸು" + + #: ../gtk/gtkplacessidebar.c:3330 + msgid "_Unmount" +-msgstr "ಇಳಿಸು (_U)" ++msgstr "ಇಳಿಸು" + + #: ../gtk/gtkplacessidebar.c:3337 + msgid "_Eject" +-msgstr "ಹೊರದಬ್ಬು (_E)" ++msgstr "ಹೊರದಬ್ಬು" + + #: ../gtk/gtkplacessidebar.c:3344 + msgid "_Detect Media" +-msgstr "ಮಾಧ್ಯಮವನ್ನು ಪತ್ತೆ ಮಾಡು (_D)" ++msgstr "ಮಾಧ್ಯಮವನ್ನು ಪತ್ತೆ ಮಾಡು" + + #: ../gtk/gtkplacessidebar.c:3953 + msgid "Computer" +@@ -2858,7 +2858,7 @@ + + #: ../gtk/gtkprintbackend.c:833 + msgid "_Remember password" +-msgstr "ಗುಪ್ತಪದವನ್ನು ನೆನಪಿನಲ್ಲಿಡು (_R)" ++msgstr "ಗುಪ್ತಪದವನ್ನು ನೆನಪಿನಲ್ಲಿಡು" + + #: ../gtk/gtkprinteroptionwidget.c:542 + msgid "Select a filename" +@@ -3010,7 +3010,7 @@ + + #: ../gtk/gtkprintunixdialog.c:734 + msgid "_Print" +-msgstr "ಮುದ್ರಿಸು (_P)" ++msgstr "ಮುದ್ರಿಸು" + + #: ../gtk/gtkprintunixdialog.c:842 + msgid "Getting printer information failed" +@@ -3113,19 +3113,19 @@ + + #: ../gtk/gtkrecentchooserdefault.c:1692 + msgid "Copy _Location" +-msgstr "ಇಲ್ಲಿಗೆ ನಕಲಿಸು (_L)" ++msgstr "ಇಲ್ಲಿಗೆ ನಕಲಿಸು" + + #: ../gtk/gtkrecentchooserdefault.c:1703 + msgid "_Remove From List" +-msgstr "ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು (_R)" ++msgstr "ಪಟ್ಟಿಯಿಂದ ತೆಗೆದುಹಾಕು" + + #: ../gtk/gtkrecentchooserdefault.c:1710 + msgid "_Clear List" +-msgstr "ಪಟ್ಟಿಯನ್ನು ಅಳಿಸಿಹಾಕು (_C)" ++msgstr "ಪಟ್ಟಿಯನ್ನು ಅಳಿಸಿಹಾಕು" + + #: ../gtk/gtkrecentchooserdefault.c:1722 + msgid "Show _Private Resources" +-msgstr "ಖಾಸಗಿ ಸಂಪನ್ಮೂಲಗಳನ್ನು ತೋರಿಸು (_P)" ++msgstr "ಖಾಸಗಿ ಸಂಪನ್ಮೂಲಗಳನ್ನು ತೋರಿಸು" + + #. we create a placeholder menuitem, to be used in case + #. * the menu is empty. this placeholder will stay around +@@ -3334,11 +3334,11 @@ + + #: ../gtk/gtktextutil.c:57 + msgid "LRM _Left-to-right mark" +-msgstr "LRM ಎಡದಿಂದ-ಬಲಕ್ಕೆ ಗುರುತು (_L)" ++msgstr "LRM ಎಡದಿಂದ-ಬಲಕ್ಕೆ ಗುರುತು" + + #: ../gtk/gtktextutil.c:58 + msgid "RLM _Right-to-left mark" +-msgstr "RLM ಬಲದಿಂದ-ಎಡಕ್ಕೆ ಗುರುತು (_R)" ++msgstr "RLM ಬಲದಿಂದ-ಎಡಕ್ಕೆ ಗುರುತು" + + #: ../gtk/gtktextutil.c:59 + msgid "LRE Left-to-right _embedding" +@@ -3362,7 +3362,7 @@ + + #: ../gtk/gtktextutil.c:64 + msgid "ZWS _Zero width space" +-msgstr "ZWS ಶೂನ್ಯ ಅಗಲದ ಜಾಗ (_Z)" ++msgstr "ZWS ಶೂನ್ಯ ಅಗಲದ ಜಾಗ" + + #: ../gtk/gtktextutil.c:65 + msgid "ZWJ Zero width _joiner" +@@ -3492,7 +3492,7 @@ + + #: ../gtk/inspector/css-editor.c:196 + msgid "_Save" +-msgstr "ಉಳಿಸು (_S)" ++msgstr "ಉಳಿಸು" + + #. vim: set et sw=2 ts=2: + #: ../gtk/inspector/css-editor.ui.h:1 +@@ -5280,7 +5280,7 @@ + + #: ../modules/printbackends/file/gtkprintbackendfile.c:745 + msgid "_Output format" +-msgstr "ಔಟ್‌ಪುಟ್ ವಿನ್ಯಾಸ (_O)" ++msgstr "ಔಟ್‌ಪುಟ್ ವಿನ್ಯಾಸ" + + #: ../modules/printbackends/lpr/gtkprintbackendlpr.c:393 + msgid "Print to LPR" +@@ -5339,11 +5339,11 @@ + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:4 + msgid "_View All Applications" +-msgstr "ಎಲ್ಲಾ ಅನ್ವಯಗಳನ್ನು ನೋಡಿ (_V)" ++msgstr "ಎಲ್ಲಾ ಅನ್ವಯಗಳನ್ನು ನೋಡಿ" + + #: ../gtk/resources/ui/gtkappchooserdialog.ui.h:5 + msgid "_Find New Applications" +-msgstr "ಹೊಸ ಅನ್ವಯಗಳನ್ನು ನೋಡು (_F)" ++msgstr "ಹೊಸ ಅನ್ವಯಗಳನ್ನು ನೋಡು" + + #: ../gtk/resources/ui/gtkappchooserwidget.ui.h:1 + msgid "No applications found." +@@ -5377,15 +5377,15 @@ + + #: ../gtk/resources/ui/gtkassistant.ui.h:2 + msgid "_Next" +-msgstr "ಮುಂದಕ್ಕೆ (_N)" ++msgstr "ಮುಂದಕ್ಕೆ" + + #: ../gtk/resources/ui/gtkassistant.ui.h:3 + msgid "_Back" +-msgstr "ಹಿಂದಕ್ಕೆ (_B)" ++msgstr "ಹಿಂದಕ್ಕೆ" + + #: ../gtk/resources/ui/gtkassistant.ui.h:4 + msgid "_Finish" +-msgstr "ಮುಗಿಸು (_F)" ++msgstr "ಮುಗಿಸು" + + #: ../gtk/resources/ui/gtkcolorchooserdialog.ui.h:1 + msgid "Select a Color" +@@ -5433,7 +5433,7 @@ + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:2 + msgid "_Location:" +-msgstr "ತಾಣ (_L):" ++msgstr "ತಾಣ:" + + #: ../gtk/resources/ui/gtkfilechooserwidget.ui.h:3 + msgid "Files" +@@ -5472,16 +5472,16 @@ + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:2 + msgid "_Format for:" +-msgstr "ಇದರ ವಿನ್ಯಾಸ (_F):" ++msgstr "ಇದರ ವಿನ್ಯಾಸ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:3 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:38 + msgid "_Paper size:" +-msgstr "ಕಾಗದದ ಗಾತ್ರ (_P):" ++msgstr "ಕಾಗದದ ಗಾತ್ರ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:4 + msgid "_Orientation:" +-msgstr "ವಾಲಿಕೆ (_O):" ++msgstr "ವಾಲಿಕೆ:" + + #: ../gtk/resources/ui/gtkpagesetupunixdialog.ui.h:5 + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:40 +@@ -5526,7 +5526,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:9 + msgid "_All Pages" +-msgstr "ಎಲ್ಲಾ ಹಾಳೆಗಳು (_A)" ++msgstr "ಎಲ್ಲಾ ಹಾಳೆಗಳು" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:10 + msgid "C_urrent Page" +@@ -5568,7 +5568,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:23 + msgid "_Reverse" +-msgstr "ವಿಲೋಮ (_R)" ++msgstr "ವಿಲೋಮ" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:25 + msgid "Layout" +@@ -5588,7 +5588,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:29 + msgid "_Only print:" +-msgstr "ಕೇವಲ ಮುದ್ರಿಸು (_O):" ++msgstr "ಕೇವಲ ಮುದ್ರಿಸು:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:30 + msgid "All sheets" +@@ -5624,7 +5624,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:39 + msgid "Or_ientation:" +-msgstr "ವಾಲಿಕೆ (_O):" ++msgstr "ವಾಲಿಕೆ:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:45 + msgid "Job Details" +@@ -5636,7 +5636,7 @@ + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:47 + msgid "_Billing info:" +-msgstr "ಬಿಲ್ಲು ಮಾಡುವ ಮಾಹಿತಿ (_B):" ++msgstr "ಬಿಲ್ಲು ಮಾಡುವ ಮಾಹಿತಿ:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:48 + msgid "Print Document" +@@ -5645,12 +5645,12 @@ + #. this is one of the choices for the print at option in the print dialog + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:51 + msgid "_Now" +-msgstr "ಈಗ (_N)" ++msgstr "ಈಗ" + + #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:54 + msgid "A_t:" +-msgstr "ಇಲ್ಲಿ (_A):" ++msgstr "ಇಲ್ಲಿ:" + + #. Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:55 +@@ -5691,7 +5691,7 @@ + #. this is the label used for the option in the print dialog that controls the back cover page. + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:81 + msgid "_After:" +-msgstr "ಇದರ ನಂತರ (_A):" ++msgstr "ಇದರ ನಂತರ:" + + #: ../gtk/resources/ui/gtkprintunixdialog.ui.h:82 + msgid "Job" +@@ -5765,7 +5765,7 @@ + #~ msgstr "ಚಾಲನೆ ಮತ್ತು ಜಡ ಸ್ಥಿತಿಗಳ ಬದಲಾವಣೆ ಮಾಡುತ್ತದೆ" + + #~ msgid "_License" +-#~ msgstr "ಪರವಾನಗಿ (_L)" ++#~ msgstr "ಪರವಾನಗಿ" + + #~ msgid "Failed to look for applications online" + #~ msgstr "ಅನ್ವಯಗಳನ್ನು ಆನ್‌ಲೈನಿನಲ್ಲಿ ನೋಡಲು ವಿಫಲಗೊಂಡಿದೆ" +@@ -5799,10 +5799,10 @@ + #~ msgstr "ಮುಂದುವರೆ (_o)" + + #~ msgid "Input _Methods" +-#~ msgstr "ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳು (_M)" ++#~ msgstr "ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳು" + + #~ msgid "_Insert Unicode Control Character" +-#~ msgstr "ಯುನಿಕೊಡ್ ನಿಯಂತ್ರಣ ಚಿಹ್ನೆ (_I)" ++#~ msgstr "ಯುನಿಕೊಡ್ ನಿಯಂತ್ರಣ ಚಿಹ್ನೆ" + + #~ msgid "Could not retrieve information about the file" + #~ msgstr "ಕಡತದ ಬಗೆಗಿನ ಮಾಹಿತಿಯನ್ನು ಮರಳಿ ಪಡೆಯಲಾಗಿಲ್ಲ" +@@ -5835,13 +5835,13 @@ + #~ msgstr "ಸ್ಥಳಗಳು" + + #~ msgid "_Places" +-#~ msgstr "ಸ್ಥಳಗಳು (_P)" ++#~ msgstr "ಸ್ಥಳಗಳು" + + #~ msgid "Add the selected folder to the Bookmarks" + #~ msgstr "ಆರಿಸಲ್ಪಟ್ಟ ಕೋಶಗಳನ್ನು ಬುಕ್-ಮಾರ್ಕುಗಳಿಗೆ ಸೇರಿಸಿ" + + #~ msgid "_Copy file’s location" +-#~ msgstr "ಕಡತದ ಸ್ಥಳವನ್ನು ಪ್ರತಿ ಮಾಡು (_C)" ++#~ msgstr "ಕಡತದ ಸ್ಥಳವನ್ನು ಪ್ರತಿ ಮಾಡು" + + #~ msgid "Type a file name" + #~ msgstr "ಒಂದು ಕಡತದ ಹೆಸರನ್ನು ಟೈಪಿಸು" +diff -urN a/po-properties/mr.po b/po-properties/mr.po +--- a/po-properties/mr.po 2025-06-09 19:54:59.337432854 -0700 ++++ b/po-properties/mr.po 2025-06-09 20:11:48.532733914 -0700 +@@ -4875,7 +4875,7 @@ + + #: ../gtk/gtkmenu.c:781 + msgid "Bottom Attach" +-msgstr "तळ भाग(_B)" ++msgstr "तळ भाग" + + #: ../gtk/gtkmenu.c:796 + msgid "Arbitrary constant to scale down the size of the scroll arrow" +diff -urN a/po-properties/zh_CN.po b/po-properties/zh_CN.po +--- a/po-properties/zh_CN.po 2025-06-09 19:54:59.429433756 -0700 ++++ b/po-properties/zh_CN.po 2025-06-09 20:11:48.640735316 -0700 +@@ -10713,19 +10713,19 @@ + + #, fuzzy + #~ msgid "_Disconnect" +-#~ msgstr "断线(_D)" ++#~ msgstr "断线" + + #, fuzzy + #~ msgid "_Unmount" +-#~ msgstr "卸载(_U)" ++#~ msgstr "卸载" + + #, fuzzy + #~ msgid "_Connect" +-#~ msgstr "连接(_C)" ++#~ msgstr "连接" + + #, fuzzy + #~ msgid "_Mount" +-#~ msgstr "挂载(_M)" ++#~ msgstr "挂载" + + #, fuzzy + #~ msgid "Disconnect" +diff -urN a/po-properties/zh_TW.po b/po-properties/zh_TW.po +--- a/po-properties/zh_TW.po 2025-06-09 19:54:59.429433756 -0700 ++++ b/po-properties/zh_TW.po 2025-06-09 20:11:48.656735524 -0700 +@@ -9382,16 +9382,16 @@ + #~ msgstr "當該組合方塊被滑鼠點選時是否自動取得焦點" + + #~ msgid "_Disconnect" +-#~ msgstr "斷線(_D)" ++#~ msgstr "斷線" + + #~ msgid "_Unmount" +-#~ msgstr "卸載(_U)" ++#~ msgstr "卸載" + + #~ msgid "_Connect" +-#~ msgstr "連線(_C)" ++#~ msgstr "連線" + + #~ msgid "_Mount" +-#~ msgstr "掛載(_M)" ++#~ msgstr "掛載" + + #~ msgid "Disconnect" + #~ msgstr "斷線" diff --git a/debian/patches/301_command-key.patch b/debian/patches/301_command-key.patch new file mode 100644 index 0000000000..71d013ee49 --- /dev/null +++ b/debian/patches/301_command-key.patch @@ -0,0 +1,21538 @@ +Description: Use Command as the primary modifier +Origin: Callisto Desktop +Author: Maia +Last-Update: 2025-06-09 gtk+3.0 3.24.38 + +diff -urN '--exclude=.git' a/gdk/gdkkeys.c b/gdk/gdkkeys.c +--- a/gdk/gdkkeys.c 2025-06-09 19:54:58.765427234 -0700 ++++ b/gdk/gdkkeys.c 2025-06-09 20:06:00.203830175 -0700 +@@ -638,7 +638,7 @@ + switch (intent) + { + case GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR: +- return GDK_CONTROL_MASK; ++ return GDK_SUPER_MASK; + + case GDK_MODIFIER_INTENT_CONTEXT_MENU: + return 0; +@@ -647,10 +647,10 @@ + return GDK_SHIFT_MASK; + + case GDK_MODIFIER_INTENT_MODIFY_SELECTION: +- return GDK_CONTROL_MASK; ++ return GDK_SUPER_MASK; + + case GDK_MODIFIER_INTENT_NO_TEXT_INPUT: +- return GDK_MOD1_MASK | GDK_CONTROL_MASK; ++ return GDK_MOD1_MASK | GDK_SUPER_MASK | GDK_CONTROL_MASK; + + case GDK_MODIFIER_INTENT_SHIFT_GROUP: + return 0; +diff -urN '--exclude=.git' a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c +--- a/gdk/x11/gdkdnd-x11.c 2025-06-09 19:54:58.801427588 -0700 ++++ b/gdk/x11/gdkdnd-x11.c 2025-06-09 20:06:00.203830175 -0700 +@@ -2892,9 +2892,9 @@ + *suggested_action = GDK_ACTION_ASK; + *possible_actions = actions; + } +- else if (state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) ++ else if (state & (GDK_SHIFT_MASK | GDK_SUPER_MASK)) + { +- if ((state & GDK_SHIFT_MASK) && (state & GDK_CONTROL_MASK)) ++ if ((state & GDK_SHIFT_MASK) && (state & GDK_SUPER_MASK)) + { + if (actions & GDK_ACTION_LINK) + { +@@ -2902,7 +2902,7 @@ + *possible_actions = GDK_ACTION_LINK; + } + } +- else if (state & GDK_CONTROL_MASK) ++ else if (state & GDK_SUPER_MASK) + { + if (actions & GDK_ACTION_COPY) + { +diff -urN '--exclude=.git' a/gtk/deprecated/gtkstock.c b/gtk/deprecated/gtkstock.c +--- a/gtk/deprecated/gtkstock.c 2025-06-09 19:54:58.833427904 -0700 ++++ b/gtk/deprecated/gtkstock.c 2025-06-09 20:06:00.203830175 -0700 +@@ -104,7 +104,7 @@ + { + item = gtk_stock_item_copy (item); + ((GtkStockItem *)item)->modifier = (NON_STATIC_MASK | +- _gtk_get_primary_accel_mod ()); ++ GDK_SUPER_MASK); + } + else + { +diff -urN '--exclude=.git' a/gtk/gtkdnd.c b/gtk/gtkdnd.c +--- a/gtk/gtkdnd.c 2025-06-09 20:05:32.315562711 -0700 ++++ b/gtk/gtkdnd.c 2025-06-09 20:06:00.207830213 -0700 +@@ -708,9 +708,9 @@ + *suggested_action = GDK_ACTION_ASK; + *possible_actions = actions; + } +- else if (state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) ++ else if (state & (GDK_SHIFT_MASK | GDK_SUPER_MASK)) + { +- if ((state & GDK_SHIFT_MASK) && (state & GDK_CONTROL_MASK)) ++ if ((state & GDK_SHIFT_MASK) && (state & GDK_SUPER_MASK)) + { + if (actions & GDK_ACTION_LINK) + { +@@ -718,7 +718,7 @@ + *possible_actions = GDK_ACTION_LINK; + } + } +- else if (state & GDK_CONTROL_MASK) ++ else if (state & GDK_SUPER_MASK) + { + if (actions & GDK_ACTION_COPY) + { +diff -urN '--exclude=.git' a/gtk/gtkemojichooser.c b/gtk/gtkemojichooser.c +--- a/gtk/gtkemojichooser.c 2025-06-09 19:54:58.989429434 -0700 ++++ b/gtk/gtkemojichooser.c 2025-06-09 20:06:00.207830213 -0700 +@@ -266,7 +266,7 @@ + gdk_device_get_state (device, gtk_widget_get_window (GTK_WIDGET (chooser)), + NULL, &state); + +- return (state & GDK_CONTROL_MASK) == 0; ++ return (state & GDK_SUPER_MASK) == 0; + } + + static void +diff -urN '--exclude=.git' a/gtk/gtkentry.c b/gtk/gtkentry.c +--- a/gtk/gtkentry.c 2025-06-09 20:05:32.319562751 -0700 ++++ b/gtk/gtkentry.c 2025-06-09 20:06:00.211830252 -0700 +@@ -1953,16 +1953,16 @@ + add_move_binding (binding_set, GDK_KEY_KP_Left, 0, + GTK_MOVEMENT_VISUAL_POSITIONS, -1); + +- add_move_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, 1); + +- add_move_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, -1); + + add_move_binding (binding_set, GDK_KEY_Home, 0, +@@ -1977,49 +1977,49 @@ + add_move_binding (binding_set, GDK_KEY_KP_End, 0, + GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); + +- add_move_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Home, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, -1); + +- add_move_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_End, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_End, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_End, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, 1); + + /* Select all + */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "move-cursor", 3, + GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, + G_TYPE_INT, -1, + G_TYPE_BOOLEAN, FALSE); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "move-cursor", 3, + GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, + G_TYPE_INT, 1, + G_TYPE_BOOLEAN, TRUE); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, + "move-cursor", 3, + GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, + G_TYPE_INT, -1, + G_TYPE_BOOLEAN, FALSE); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, + "move-cursor", 3, + GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, + G_TYPE_INT, 1, + G_TYPE_BOOLEAN, TRUE); + /* Unselect all + */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_SUPER_MASK, + "move-cursor", 3, + GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_VISUAL_POSITIONS, + G_TYPE_INT, 0, + G_TYPE_BOOLEAN, FALSE); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "move-cursor", 3, + GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_VISUAL_POSITIONS, + G_TYPE_INT, 0, +@@ -2048,7 +2048,7 @@ + gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0, + "backspace", 0); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_u, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_u, GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, + G_TYPE_INT, -1); +@@ -2057,40 +2057,40 @@ + gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK, + "backspace", 0); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, + G_TYPE_INT, -1); + + /* Cut/copy/paste */ + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_SUPER_MASK, + "cut-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_SUPER_MASK, + "copy-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_SUPER_MASK, + "paste-clipboard", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK, + "cut-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SUPER_MASK, + "copy-clipboard", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK, + "paste-clipboard", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK, + "cut-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SUPER_MASK, + "copy-clipboard", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SHIFT_MASK, + "paste-clipboard", 0); +@@ -2120,9 +2120,9 @@ + GTK_PARAM_READABLE | + G_PARAM_DEPRECATED)); + /* Emoji */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_SUPER_MASK, + "insert-emoji", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_SUPER_MASK, + "insert-emoji", 0); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ENTRY_ACCESSIBLE); +diff -urN '--exclude=.git' a/gtk/gtkentry.c.orig b/gtk/gtkentry.c.orig +--- a/gtk/gtkentry.c.orig 1969-12-31 16:00:00.000000000 -0800 ++++ b/gtk/gtkentry.c.orig 2025-06-09 20:05:43.715672063 -0700 +@@ -0,0 +1,11202 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* GTK - The GIMP Toolkit ++ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald ++ * Copyright (C) 2004-2006 Christian Hammond ++ * Copyright (C) 2008 Cody Russell ++ * Copyright (C) 2008 Red Hat, Inc. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library. If not, see . ++ */ ++ ++/* ++ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS ++ * file for a list of people on the GTK+ Team. See the ChangeLog ++ * files for a list of changes. These files are distributed with ++ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. ++ */ ++ ++#include "config.h" ++ ++#include ++ ++#include "gtkbindings.h" ++#include "gtkcelleditable.h" ++#include "gtkclipboard.h" ++#include "gtkdebug.h" ++#include "gtkdnd.h" ++#include "gtkdndprivate.h" ++#include "gtkentry.h" ++#include "gtkentrybuffer.h" ++#include "gtkiconhelperprivate.h" ++#include "gtkemojichooser.h" ++#include "gtkemojicompletion.h" ++#include "gtkentrybuffer.h" ++#include "gtkimcontextsimple.h" ++#include "gtkimmulticontext.h" ++#include "gtkintl.h" ++#include "gtklabel.h" ++#include "gtkmain.h" ++#include "gtkmarshalers.h" ++#include "gtkmenu.h" ++#include "gtkmenuitem.h" ++#include "gtkpango.h" ++#include "gtkseparatormenuitem.h" ++#include "gtkselection.h" ++#include "gtksettings.h" ++#include "gtkspinbutton.h" ++#include "gtktextutil.h" ++#include "gtkwindow.h" ++#include "gtktreeview.h" ++#include "gtktreeselection.h" ++#include "gtktypebuiltins.h" ++#include "gtkprivate.h" ++#include "gtkentryprivate.h" ++#include "gtkcelllayout.h" ++#include "gtktooltip.h" ++#include "gtkicontheme.h" ++#include "gtkwidgetprivate.h" ++#include "gtkstylecontextprivate.h" ++#include "gtktexthandleprivate.h" ++#include "gtkpopover.h" ++#include "gtktoolbar.h" ++#include "gtkmagnifierprivate.h" ++#include "gtkcssnodeprivate.h" ++#include "gtkcsscustomgadgetprivate.h" ++#include "gtkprogresstrackerprivate.h" ++#include "gtkemojichooser.h" ++#include "gtkwindow.h" ++ ++#include "a11y/gtkentryaccessible.h" ++ ++#include "fallback-c89.c" ++ ++/** ++ * SECTION:gtkentry ++ * @Short_description: A single line text entry field ++ * @Title: GtkEntry ++ * @See_also: #GtkTextView, #GtkEntryCompletion ++ * ++ * The #GtkEntry widget is a single line text entry ++ * widget. A fairly large set of key bindings are supported ++ * by default. If the entered text is longer than the allocation ++ * of the widget, the widget will scroll so that the cursor ++ * position is visible. ++ * ++ * When using an entry for passwords and other sensitive information, ++ * it can be put into “password mode” using gtk_entry_set_visibility(). ++ * In this mode, entered text is displayed using a “invisible” character. ++ * By default, GTK+ picks the best invisible character that is available ++ * in the current font, but it can be changed with ++ * gtk_entry_set_invisible_char(). Since 2.16, GTK+ displays a warning ++ * when Caps Lock or input methods might interfere with entering text in ++ * a password entry. The warning can be turned off with the ++ * #GtkEntry:caps-lock-warning property. ++ * ++ * Since 2.16, GtkEntry has the ability to display progress or activity ++ * information behind the text. To make an entry display such information, ++ * use gtk_entry_set_progress_fraction() or gtk_entry_set_progress_pulse_step(). ++ * ++ * Additionally, GtkEntry can show icons at either side of the entry. These ++ * icons can be activatable by clicking, can be set up as drag source and ++ * can have tooltips. To add an icon, use gtk_entry_set_icon_from_gicon() or ++ * one of the various other functions that set an icon from a stock id, an ++ * icon name or a pixbuf. To trigger an action when the user clicks an icon, ++ * connect to the #GtkEntry::icon-press signal. To allow DND operations ++ * from an icon, use gtk_entry_set_icon_drag_source(). To set a tooltip on ++ * an icon, use gtk_entry_set_icon_tooltip_text() or the corresponding function ++ * for markup. ++ * ++ * Note that functionality or information that is only available by clicking ++ * on an icon in an entry may not be accessible at all to users which are not ++ * able to use a mouse or other pointing device. It is therefore recommended ++ * that any such functionality should also be available by other means, e.g. ++ * via the context menu of the entry. ++ * ++ * # CSS nodes ++ * ++ * |[ ++ * entry[.read-only][.flat][.warning][.error] ++ * ├── image.left ++ * ├── image.right ++ * ├── undershoot.left ++ * ├── undershoot.right ++ * ├── [selection] ++ * ├── [progress[.pulse]] ++ * ╰── [window.popup] ++ * ]| ++ * ++ * GtkEntry has a main node with the name entry. Depending on the properties ++ * of the entry, the style classes .read-only and .flat may appear. The style ++ * classes .warning and .error may also be used with entries. ++ * ++ * When the entry shows icons, it adds subnodes with the name image and the ++ * style class .left or .right, depending on where the icon appears. ++ * ++ * When the entry has a selection, it adds a subnode with the name selection. ++ * ++ * When the entry shows progress, it adds a subnode with the name progress. ++ * The node has the style class .pulse when the shown progress is pulsing. ++ * ++ * The CSS node for a context menu is added as a subnode below entry as well. ++ * ++ * The undershoot nodes are used to draw the underflow indication when content ++ * is scrolled out of view. These nodes get the .left and .right style classes ++ * added depending on where the indication is drawn. ++ * ++ * When touch is used and touch selection handles are shown, they are using ++ * CSS nodes with name cursor-handle. They get the .top or .bottom style class ++ * depending on where they are shown in relation to the selection. If there is ++ * just a single handle for the text cursor, it gets the style class ++ * .insertion-cursor. ++ */ ++ ++#define MIN_ENTRY_WIDTH 150 ++ ++#define MAX_ICONS 2 ++ ++#define IS_VALID_ICON_POSITION(pos) \ ++ ((pos) == GTK_ENTRY_ICON_PRIMARY || \ ++ (pos) == GTK_ENTRY_ICON_SECONDARY) ++ ++static GQuark quark_inner_border = 0; ++static GQuark quark_password_hint = 0; ++static GQuark quark_cursor_hadjustment = 0; ++static GQuark quark_capslock_feedback = 0; ++static GQuark quark_gtk_signal = 0; ++static GQuark quark_entry_completion = 0; ++ ++typedef struct _EntryIconInfo EntryIconInfo; ++typedef struct _GtkEntryPasswordHint GtkEntryPasswordHint; ++typedef struct _GtkEntryCapslockFeedback GtkEntryCapslockFeedback; ++ ++struct _GtkEntryPrivate ++{ ++ EntryIconInfo *icons[MAX_ICONS]; ++ ++ GtkEntryBuffer *buffer; ++ GtkIMContext *im_context; ++ GtkWidget *popup_menu; ++ ++ GdkWindow *text_area; ++ GtkAllocation text_allocation; ++ int text_baseline; ++ ++ PangoLayout *cached_layout; ++ PangoAttrList *attrs; ++ PangoTabArray *tabs; ++ ++ gchar *im_module; ++ ++ gdouble progress_fraction; ++ gdouble progress_pulse_fraction; ++ gdouble progress_pulse_current; ++ ++ guint tick_id; ++ GtkProgressTracker tracker; ++ gint64 pulse1; ++ gint64 pulse2; ++ gdouble last_iteration; ++ ++ gchar *placeholder_text; ++ ++ GtkTextHandle *text_handle; ++ GtkWidget *selection_bubble; ++ guint selection_bubble_timeout_id; ++ ++ GtkWidget *magnifier_popover; ++ GtkWidget *magnifier; ++ ++ GtkGesture *drag_gesture; ++ GtkGesture *multipress_gesture; ++ ++ GtkCssGadget *gadget; ++ GtkCssGadget *progress_gadget; ++ GtkCssNode *selection_node; ++ GtkCssNode *undershoot_node[2]; ++ ++ gfloat xalign; ++ ++ gint ascent; /* font ascent in pango units */ ++ gint current_pos; ++ gint descent; /* font descent in pango units */ ++ gint dnd_position; /* In chars, -1 == no DND cursor */ ++ gint drag_start_x; ++ gint drag_start_y; ++ gint insert_pos; ++ gint selection_bound; ++ gint scroll_offset; ++ gint start_x; ++ gint start_y; ++ gint width_chars; ++ gint max_width_chars; ++ ++ gunichar invisible_char; ++ ++ guint blink_time; /* time in msec the cursor has blinked since last user event */ ++ guint blink_timeout; ++ ++ guint16 preedit_length; /* length of preedit string, in bytes */ ++ guint16 preedit_cursor; /* offset of cursor within preedit string, in chars */ ++ ++ gint64 handle_place_time; ++ ++ guint shadow_type : 4; ++ guint editable : 1; ++ guint show_emoji_icon : 1; ++ guint enable_emoji_completion : 1; ++ guint in_drag : 1; ++ guint overwrite_mode : 1; ++ guint visible : 1; ++ ++ guint activates_default : 1; ++ guint cache_includes_preedit : 1; ++ guint caps_lock_warning : 1; ++ guint caps_lock_warning_shown : 1; ++ guint change_count : 8; ++ guint cursor_visible : 1; ++ guint editing_canceled : 1; /* Only used by GtkCellRendererText */ ++ guint in_click : 1; /* Flag so we don't select all when clicking in entry to focus in */ ++ guint invisible_char_set : 1; ++ guint mouse_cursor_obscured : 1; ++ guint need_im_reset : 1; ++ guint progress_pulse_mode : 1; ++ guint progress_pulse_way_back : 1; ++ guint real_changed : 1; ++ guint resolved_dir : 4; /* PangoDirection */ ++ guint select_words : 1; ++ guint select_lines : 1; ++ guint truncate_multiline : 1; ++ guint cursor_handle_dragged : 1; ++ guint selection_handle_dragged : 1; ++ guint populate_all : 1; ++ guint handling_key_event : 1; ++}; ++ ++struct _EntryIconInfo ++{ ++ GdkWindow *window; ++ gchar *tooltip; ++ guint insensitive : 1; ++ guint nonactivatable : 1; ++ guint prelight : 1; ++ guint in_drag : 1; ++ guint pressed : 1; ++ ++ GdkDragAction actions; ++ GtkTargetList *target_list; ++ GtkCssGadget *gadget; ++ GdkEventSequence *current_sequence; ++ GdkDevice *device; ++}; ++ ++struct _GtkEntryPasswordHint ++{ ++ gint position; /* Position (in text) of the last password hint */ ++ guint source_id; /* Timeout source id */ ++}; ++ ++struct _GtkEntryCapslockFeedback ++{ ++ GtkWidget *entry; ++ GtkWidget *window; ++ GtkWidget *label; ++}; ++ ++enum { ++ ACTIVATE, ++ POPULATE_POPUP, ++ MOVE_CURSOR, ++ INSERT_AT_CURSOR, ++ DELETE_FROM_CURSOR, ++ BACKSPACE, ++ CUT_CLIPBOARD, ++ COPY_CLIPBOARD, ++ PASTE_CLIPBOARD, ++ TOGGLE_OVERWRITE, ++ ICON_PRESS, ++ ICON_RELEASE, ++ PREEDIT_CHANGED, ++ INSERT_EMOJI, ++ LAST_SIGNAL ++}; ++ ++enum { ++ PROP_0, ++ PROP_BUFFER, ++ PROP_CURSOR_POSITION, ++ PROP_SELECTION_BOUND, ++ PROP_EDITABLE, ++ PROP_MAX_LENGTH, ++ PROP_VISIBILITY, ++ PROP_HAS_FRAME, ++ PROP_INNER_BORDER, ++ PROP_INVISIBLE_CHAR, ++ PROP_ACTIVATES_DEFAULT, ++ PROP_WIDTH_CHARS, ++ PROP_MAX_WIDTH_CHARS, ++ PROP_SCROLL_OFFSET, ++ PROP_TEXT, ++ PROP_XALIGN, ++ PROP_TRUNCATE_MULTILINE, ++ PROP_SHADOW_TYPE, ++ PROP_OVERWRITE_MODE, ++ PROP_TEXT_LENGTH, ++ PROP_INVISIBLE_CHAR_SET, ++ PROP_CAPS_LOCK_WARNING, ++ PROP_PROGRESS_FRACTION, ++ PROP_PROGRESS_PULSE_STEP, ++ PROP_PIXBUF_PRIMARY, ++ PROP_PIXBUF_SECONDARY, ++ PROP_STOCK_PRIMARY, ++ PROP_STOCK_SECONDARY, ++ PROP_ICON_NAME_PRIMARY, ++ PROP_ICON_NAME_SECONDARY, ++ PROP_GICON_PRIMARY, ++ PROP_GICON_SECONDARY, ++ PROP_STORAGE_TYPE_PRIMARY, ++ PROP_STORAGE_TYPE_SECONDARY, ++ PROP_ACTIVATABLE_PRIMARY, ++ PROP_ACTIVATABLE_SECONDARY, ++ PROP_SENSITIVE_PRIMARY, ++ PROP_SENSITIVE_SECONDARY, ++ PROP_TOOLTIP_TEXT_PRIMARY, ++ PROP_TOOLTIP_TEXT_SECONDARY, ++ PROP_TOOLTIP_MARKUP_PRIMARY, ++ PROP_TOOLTIP_MARKUP_SECONDARY, ++ PROP_IM_MODULE, ++ PROP_PLACEHOLDER_TEXT, ++ PROP_COMPLETION, ++ PROP_INPUT_PURPOSE, ++ PROP_INPUT_HINTS, ++ PROP_ATTRIBUTES, ++ PROP_POPULATE_ALL, ++ PROP_TABS, ++ PROP_SHOW_EMOJI_ICON, ++ PROP_ENABLE_EMOJI_COMPLETION, ++ PROP_EDITING_CANCELED, ++ NUM_PROPERTIES = PROP_EDITING_CANCELED ++}; ++ ++static GParamSpec *entry_props[NUM_PROPERTIES] = { NULL, }; ++ ++static guint signals[LAST_SIGNAL] = { 0 }; ++ ++typedef enum { ++ CURSOR_STANDARD, ++ CURSOR_DND ++} CursorType; ++ ++typedef enum ++{ ++ DISPLAY_NORMAL, /* The entry text is being shown */ ++ DISPLAY_INVISIBLE, /* In invisible mode, text replaced by (eg) bullets */ ++ DISPLAY_BLANK /* In invisible mode, nothing shown at all */ ++} DisplayMode; ++ ++/* GObject methods ++ */ ++static void gtk_entry_editable_init (GtkEditableInterface *iface); ++static void gtk_entry_cell_editable_init (GtkCellEditableIface *iface); ++static void gtk_entry_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec); ++static void gtk_entry_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec); ++static void gtk_entry_finalize (GObject *object); ++static void gtk_entry_dispose (GObject *object); ++ ++/* GtkWidget methods ++ */ ++static void gtk_entry_destroy (GtkWidget *widget); ++static void gtk_entry_realize (GtkWidget *widget); ++static void gtk_entry_unrealize (GtkWidget *widget); ++static void gtk_entry_map (GtkWidget *widget); ++static void gtk_entry_unmap (GtkWidget *widget); ++static void gtk_entry_get_preferred_width (GtkWidget *widget, ++ gint *minimum, ++ gint *natural); ++static void gtk_entry_get_preferred_height (GtkWidget *widget, ++ gint *minimum, ++ gint *natural); ++static void gtk_entry_get_preferred_height_and_baseline_for_width (GtkWidget *widget, ++ gint width, ++ gint *minimum_height, ++ gint *natural_height, ++ gint *minimum_baseline, ++ gint *natural_baseline); ++static void gtk_entry_size_allocate (GtkWidget *widget, ++ GtkAllocation *allocation); ++static gint gtk_entry_draw (GtkWidget *widget, ++ cairo_t *cr); ++static gboolean gtk_entry_event (GtkWidget *widget, ++ GdkEvent *event); ++static gint gtk_entry_enter_notify (GtkWidget *widget, ++ GdkEventCrossing *event); ++static gint gtk_entry_leave_notify (GtkWidget *widget, ++ GdkEventCrossing *event); ++static gint gtk_entry_key_press (GtkWidget *widget, ++ GdkEventKey *event); ++static gint gtk_entry_key_release (GtkWidget *widget, ++ GdkEventKey *event); ++static gint gtk_entry_focus_in (GtkWidget *widget, ++ GdkEventFocus *event); ++static gint gtk_entry_focus_out (GtkWidget *widget, ++ GdkEventFocus *event); ++static void gtk_entry_grab_focus (GtkWidget *widget); ++static void gtk_entry_style_updated (GtkWidget *widget); ++static gboolean gtk_entry_query_tooltip (GtkWidget *widget, ++ gint x, ++ gint y, ++ gboolean keyboard_tip, ++ GtkTooltip *tooltip); ++static void gtk_entry_direction_changed (GtkWidget *widget, ++ GtkTextDirection previous_dir); ++static void gtk_entry_state_flags_changed (GtkWidget *widget, ++ GtkStateFlags previous_state); ++static void gtk_entry_screen_changed (GtkWidget *widget, ++ GdkScreen *old_screen); ++ ++static gboolean gtk_entry_drag_drop (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time); ++static gboolean gtk_entry_drag_motion (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time); ++static void gtk_entry_drag_leave (GtkWidget *widget, ++ GdkDragContext *context, ++ guint time); ++static void gtk_entry_drag_data_received (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ GtkSelectionData *selection_data, ++ guint info, ++ guint time); ++static void gtk_entry_drag_data_get (GtkWidget *widget, ++ GdkDragContext *context, ++ GtkSelectionData *selection_data, ++ guint info, ++ guint time); ++static void gtk_entry_drag_data_delete (GtkWidget *widget, ++ GdkDragContext *context); ++static void gtk_entry_drag_begin (GtkWidget *widget, ++ GdkDragContext *context); ++static void gtk_entry_drag_end (GtkWidget *widget, ++ GdkDragContext *context); ++ ++ ++/* GtkEditable method implementations ++ */ ++static void gtk_entry_insert_text (GtkEditable *editable, ++ const gchar *new_text, ++ gint new_text_length, ++ gint *position); ++static void gtk_entry_delete_text (GtkEditable *editable, ++ gint start_pos, ++ gint end_pos); ++static gchar * gtk_entry_get_chars (GtkEditable *editable, ++ gint start_pos, ++ gint end_pos); ++static void gtk_entry_real_set_position (GtkEditable *editable, ++ gint position); ++static gint gtk_entry_get_position (GtkEditable *editable); ++static void gtk_entry_set_selection_bounds (GtkEditable *editable, ++ gint start, ++ gint end); ++static gboolean gtk_entry_get_selection_bounds (GtkEditable *editable, ++ gint *start, ++ gint *end); ++ ++/* GtkCellEditable method implementations ++ */ ++static void gtk_entry_start_editing (GtkCellEditable *cell_editable, ++ GdkEvent *event); ++ ++/* Default signal handlers ++ */ ++static void gtk_entry_real_insert_text (GtkEditable *editable, ++ const gchar *new_text, ++ gint new_text_length, ++ gint *position); ++static void gtk_entry_real_delete_text (GtkEditable *editable, ++ gint start_pos, ++ gint end_pos); ++static void gtk_entry_move_cursor (GtkEntry *entry, ++ GtkMovementStep step, ++ gint count, ++ gboolean extend_selection); ++static void gtk_entry_insert_at_cursor (GtkEntry *entry, ++ const gchar *str); ++static void gtk_entry_delete_from_cursor (GtkEntry *entry, ++ GtkDeleteType type, ++ gint count); ++static void gtk_entry_backspace (GtkEntry *entry); ++static void gtk_entry_cut_clipboard (GtkEntry *entry); ++static void gtk_entry_copy_clipboard (GtkEntry *entry); ++static void gtk_entry_paste_clipboard (GtkEntry *entry); ++static void gtk_entry_toggle_overwrite (GtkEntry *entry); ++static void gtk_entry_insert_emoji (GtkEntry *entry); ++static void gtk_entry_select_all (GtkEntry *entry); ++static void gtk_entry_real_activate (GtkEntry *entry); ++static gboolean gtk_entry_popup_menu (GtkWidget *widget); ++ ++static void keymap_direction_changed (GdkKeymap *keymap, ++ GtkEntry *entry); ++static void keymap_state_changed (GdkKeymap *keymap, ++ GtkEntry *entry); ++static void remove_capslock_feedback (GtkEntry *entry); ++ ++/* IM Context Callbacks ++ */ ++static void gtk_entry_commit_cb (GtkIMContext *context, ++ const gchar *str, ++ GtkEntry *entry); ++static void gtk_entry_preedit_changed_cb (GtkIMContext *context, ++ GtkEntry *entry); ++static gboolean gtk_entry_retrieve_surrounding_cb (GtkIMContext *context, ++ GtkEntry *entry); ++static gboolean gtk_entry_delete_surrounding_cb (GtkIMContext *context, ++ gint offset, ++ gint n_chars, ++ GtkEntry *entry); ++ ++/* Event controller callbacks */ ++static void gtk_entry_multipress_gesture_pressed (GtkGestureMultiPress *gesture, ++ gint n_press, ++ gdouble x, ++ gdouble y, ++ GtkEntry *entry); ++static void gtk_entry_drag_gesture_update (GtkGestureDrag *gesture, ++ gdouble offset_x, ++ gdouble offset_y, ++ GtkEntry *entry); ++static void gtk_entry_drag_gesture_end (GtkGestureDrag *gesture, ++ gdouble offset_x, ++ gdouble offset_y, ++ GtkEntry *entry); ++ ++/* Internal routines ++ */ ++static void gtk_entry_draw_text (GtkEntry *entry, ++ cairo_t *cr); ++static void gtk_entry_draw_cursor (GtkEntry *entry, ++ cairo_t *cr, ++ CursorType type); ++static PangoLayout *gtk_entry_ensure_layout (GtkEntry *entry, ++ gboolean include_preedit); ++static void gtk_entry_reset_layout (GtkEntry *entry); ++static void gtk_entry_recompute (GtkEntry *entry); ++static gint gtk_entry_find_position (GtkEntry *entry, ++ gint x); ++static void gtk_entry_get_cursor_locations (GtkEntry *entry, ++ CursorType type, ++ gint *strong_x, ++ gint *weak_x); ++static void gtk_entry_adjust_scroll (GtkEntry *entry); ++static gint gtk_entry_move_visually (GtkEntry *editable, ++ gint start, ++ gint count); ++static gint gtk_entry_move_logically (GtkEntry *entry, ++ gint start, ++ gint count); ++static gint gtk_entry_move_forward_word (GtkEntry *entry, ++ gint start, ++ gboolean allow_whitespace); ++static gint gtk_entry_move_backward_word (GtkEntry *entry, ++ gint start, ++ gboolean allow_whitespace); ++static void gtk_entry_delete_whitespace (GtkEntry *entry); ++static void gtk_entry_select_word (GtkEntry *entry); ++static void gtk_entry_select_line (GtkEntry *entry); ++static void gtk_entry_paste (GtkEntry *entry, ++ GdkAtom selection); ++static void gtk_entry_update_primary_selection (GtkEntry *entry); ++static void gtk_entry_do_popup (GtkEntry *entry, ++ const GdkEvent *event); ++static gboolean gtk_entry_mnemonic_activate (GtkWidget *widget, ++ gboolean group_cycling); ++static void gtk_entry_grab_notify (GtkWidget *widget, ++ gboolean was_grabbed); ++static void gtk_entry_check_cursor_blink (GtkEntry *entry); ++static void gtk_entry_pend_cursor_blink (GtkEntry *entry); ++static void gtk_entry_reset_blink_time (GtkEntry *entry); ++static void gtk_entry_get_text_area_size (GtkEntry *entry, ++ gint *x, ++ gint *y, ++ gint *width, ++ gint *height); ++static void gtk_entry_get_frame_size (GtkEntry *entry, ++ gint *x, ++ gint *y, ++ gint *width, ++ gint *height); ++static void get_frame_size (GtkEntry *entry, ++ gboolean relative_to_window, ++ gint *x, ++ gint *y, ++ gint *width, ++ gint *height); ++static void gtk_entry_move_adjustments (GtkEntry *entry); ++static void gtk_entry_update_cached_style_values(GtkEntry *entry); ++static gboolean get_middle_click_paste (GtkEntry *entry); ++static void gtk_entry_get_scroll_limits (GtkEntry *entry, ++ gint *min_offset, ++ gint *max_offset); ++ ++/* GtkTextHandle handlers */ ++static void gtk_entry_handle_drag_started (GtkTextHandle *handle, ++ GtkTextHandlePosition pos, ++ GtkEntry *entry); ++static void gtk_entry_handle_dragged (GtkTextHandle *handle, ++ GtkTextHandlePosition pos, ++ gint x, ++ gint y, ++ GtkEntry *entry); ++static void gtk_entry_handle_drag_finished (GtkTextHandle *handle, ++ GtkTextHandlePosition pos, ++ GtkEntry *entry); ++ ++static void gtk_entry_selection_bubble_popup_set (GtkEntry *entry); ++static void gtk_entry_selection_bubble_popup_unset (GtkEntry *entry); ++ ++static void begin_change (GtkEntry *entry); ++static void end_change (GtkEntry *entry); ++static void emit_changed (GtkEntry *entry); ++ ++static void buffer_inserted_text (GtkEntryBuffer *buffer, ++ guint position, ++ const gchar *chars, ++ guint n_chars, ++ GtkEntry *entry); ++static void buffer_deleted_text (GtkEntryBuffer *buffer, ++ guint position, ++ guint n_chars, ++ GtkEntry *entry); ++static void buffer_notify_text (GtkEntryBuffer *buffer, ++ GParamSpec *spec, ++ GtkEntry *entry); ++static void buffer_notify_length (GtkEntryBuffer *buffer, ++ GParamSpec *spec, ++ GtkEntry *entry); ++static void buffer_notify_max_length (GtkEntryBuffer *buffer, ++ GParamSpec *spec, ++ GtkEntry *entry); ++static void buffer_connect_signals (GtkEntry *entry); ++static void buffer_disconnect_signals (GtkEntry *entry); ++static GtkEntryBuffer *get_buffer (GtkEntry *entry); ++static void set_show_emoji_icon (GtkEntry *entry, ++ gboolean value); ++static void set_enable_emoji_completion (GtkEntry *entry, ++ gboolean value); ++ ++static void gtk_entry_measure (GtkCssGadget *gadget, ++ GtkOrientation orientation, ++ int for_size, ++ int *minimum, ++ int *natural, ++ int *minimum_baseline, ++ int *natural_baseline, ++ gpointer data); ++static void gtk_entry_allocate (GtkCssGadget *gadget, ++ const GtkAllocation *allocation, ++ int baseline, ++ GtkAllocation *out_clip, ++ gpointer data); ++static gboolean gtk_entry_render (GtkCssGadget *gadget, ++ cairo_t *cr, ++ int x, ++ int y, ++ int width, ++ int height, ++ gpointer data); ++ ++G_DEFINE_TYPE_WITH_CODE (GtkEntry, gtk_entry, GTK_TYPE_WIDGET, ++ G_ADD_PRIVATE (GtkEntry) ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE, ++ gtk_entry_editable_init) ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_CELL_EDITABLE, ++ gtk_entry_cell_editable_init)) ++ ++static void ++add_move_binding (GtkBindingSet *binding_set, ++ guint keyval, ++ guint modmask, ++ GtkMovementStep step, ++ gint count) ++{ ++ g_return_if_fail ((modmask & GDK_SHIFT_MASK) == 0); ++ ++ gtk_binding_entry_add_signal (binding_set, keyval, modmask, ++ "move-cursor", 3, ++ G_TYPE_ENUM, step, ++ G_TYPE_INT, count, ++ G_TYPE_BOOLEAN, FALSE); ++ ++ /* Selection-extending version */ ++ gtk_binding_entry_add_signal (binding_set, keyval, modmask | GDK_SHIFT_MASK, ++ "move-cursor", 3, ++ G_TYPE_ENUM, step, ++ G_TYPE_INT, count, ++ G_TYPE_BOOLEAN, TRUE); ++} ++ ++static void ++gtk_entry_class_init (GtkEntryClass *class) ++{ ++ GObjectClass *gobject_class = G_OBJECT_CLASS (class); ++ GtkWidgetClass *widget_class; ++ GtkBindingSet *binding_set; ++ ++ widget_class = (GtkWidgetClass*) class; ++ ++ gobject_class->dispose = gtk_entry_dispose; ++ gobject_class->finalize = gtk_entry_finalize; ++ gobject_class->set_property = gtk_entry_set_property; ++ gobject_class->get_property = gtk_entry_get_property; ++ ++ widget_class->destroy = gtk_entry_destroy; ++ widget_class->map = gtk_entry_map; ++ widget_class->unmap = gtk_entry_unmap; ++ widget_class->realize = gtk_entry_realize; ++ widget_class->unrealize = gtk_entry_unrealize; ++ widget_class->get_preferred_width = gtk_entry_get_preferred_width; ++ widget_class->get_preferred_height = gtk_entry_get_preferred_height; ++ widget_class->get_preferred_height_and_baseline_for_width = gtk_entry_get_preferred_height_and_baseline_for_width; ++ widget_class->size_allocate = gtk_entry_size_allocate; ++ widget_class->draw = gtk_entry_draw; ++ widget_class->enter_notify_event = gtk_entry_enter_notify; ++ widget_class->leave_notify_event = gtk_entry_leave_notify; ++ widget_class->event = gtk_entry_event; ++ widget_class->key_press_event = gtk_entry_key_press; ++ widget_class->key_release_event = gtk_entry_key_release; ++ widget_class->focus_in_event = gtk_entry_focus_in; ++ widget_class->focus_out_event = gtk_entry_focus_out; ++ widget_class->grab_focus = gtk_entry_grab_focus; ++ widget_class->style_updated = gtk_entry_style_updated; ++ widget_class->query_tooltip = gtk_entry_query_tooltip; ++ widget_class->drag_begin = gtk_entry_drag_begin; ++ widget_class->drag_end = gtk_entry_drag_end; ++ widget_class->direction_changed = gtk_entry_direction_changed; ++ widget_class->state_flags_changed = gtk_entry_state_flags_changed; ++ widget_class->screen_changed = gtk_entry_screen_changed; ++ widget_class->mnemonic_activate = gtk_entry_mnemonic_activate; ++ widget_class->grab_notify = gtk_entry_grab_notify; ++ ++ widget_class->drag_drop = gtk_entry_drag_drop; ++ widget_class->drag_motion = gtk_entry_drag_motion; ++ widget_class->drag_leave = gtk_entry_drag_leave; ++ widget_class->drag_data_received = gtk_entry_drag_data_received; ++ widget_class->drag_data_get = gtk_entry_drag_data_get; ++ widget_class->drag_data_delete = gtk_entry_drag_data_delete; ++ ++ widget_class->popup_menu = gtk_entry_popup_menu; ++ ++ class->move_cursor = gtk_entry_move_cursor; ++ class->insert_at_cursor = gtk_entry_insert_at_cursor; ++ class->delete_from_cursor = gtk_entry_delete_from_cursor; ++ class->backspace = gtk_entry_backspace; ++ class->cut_clipboard = gtk_entry_cut_clipboard; ++ class->copy_clipboard = gtk_entry_copy_clipboard; ++ class->paste_clipboard = gtk_entry_paste_clipboard; ++ class->toggle_overwrite = gtk_entry_toggle_overwrite; ++ class->insert_emoji = gtk_entry_insert_emoji; ++ class->activate = gtk_entry_real_activate; ++ class->get_text_area_size = gtk_entry_get_text_area_size; ++ class->get_frame_size = gtk_entry_get_frame_size; ++ ++ quark_inner_border = g_quark_from_static_string ("gtk-entry-inner-border"); ++ quark_password_hint = g_quark_from_static_string ("gtk-entry-password-hint"); ++ quark_cursor_hadjustment = g_quark_from_static_string ("gtk-hadjustment"); ++ quark_capslock_feedback = g_quark_from_static_string ("gtk-entry-capslock-feedback"); ++ quark_gtk_signal = g_quark_from_static_string ("gtk-signal"); ++ quark_entry_completion = g_quark_from_static_string ("gtk-entry-completion-key"); ++ ++ g_object_class_override_property (gobject_class, ++ PROP_EDITING_CANCELED, ++ "editing-canceled"); ++ ++ entry_props[PROP_BUFFER] = ++ g_param_spec_object ("buffer", ++ P_("Text Buffer"), ++ P_("Text buffer object which actually stores entry text"), ++ GTK_TYPE_ENTRY_BUFFER, ++ GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_CURSOR_POSITION] = ++ g_param_spec_int ("cursor-position", ++ P_("Cursor Position"), ++ P_("The current position of the insertion cursor in chars"), ++ 0, GTK_ENTRY_BUFFER_MAX_SIZE, ++ 0, ++ GTK_PARAM_READABLE); ++ ++ entry_props[PROP_SELECTION_BOUND] = ++ g_param_spec_int ("selection-bound", ++ P_("Selection Bound"), ++ P_("The position of the opposite end of the selection from the cursor in chars"), ++ 0, GTK_ENTRY_BUFFER_MAX_SIZE, ++ 0, ++ GTK_PARAM_READABLE); ++ ++ entry_props[PROP_EDITABLE] = ++ g_param_spec_boolean ("editable", ++ P_("Editable"), ++ P_("Whether the entry contents can be edited"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_MAX_LENGTH] = ++ g_param_spec_int ("max-length", ++ P_("Maximum length"), ++ P_("Maximum number of characters for this entry. Zero if no maximum"), ++ 0, GTK_ENTRY_BUFFER_MAX_SIZE, ++ 0, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_VISIBILITY] = ++ g_param_spec_boolean ("visibility", ++ P_("Visibility"), ++ P_("FALSE displays the \"invisible char\" instead of the actual text (password mode)"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_HAS_FRAME] = ++ g_param_spec_boolean ("has-frame", ++ P_("Has Frame"), ++ P_("FALSE removes outside bevel from entry"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:inner-border: ++ * ++ * Sets the text area's border between the text and the frame. ++ * ++ * Deprecated: 3.4: Use the standard border and padding CSS properties ++ * (through objects like #GtkStyleContext and #GtkCssProvider); the value ++ * of this style property is ignored. ++ */ ++ entry_props[PROP_INNER_BORDER] = ++ g_param_spec_boxed ("inner-border", ++ P_("Inner Border"), ++ P_("Border between text and frame. Overrides the inner-border style property"), ++ GTK_TYPE_BORDER, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED); ++ ++ entry_props[PROP_INVISIBLE_CHAR] = ++ g_param_spec_unichar ("invisible-char", ++ P_("Invisible character"), ++ P_("The character to use when masking entry contents (in \"password mode\")"), ++ '*', ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_ACTIVATES_DEFAULT] = ++ g_param_spec_boolean ("activates-default", ++ P_("Activates default"), ++ P_("Whether to activate the default widget (such as the default button in a dialog) when Enter is pressed"), ++ FALSE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_WIDTH_CHARS] = ++ g_param_spec_int ("width-chars", ++ P_("Width in chars"), ++ P_("Number of characters to leave space for in the entry"), ++ -1, G_MAXINT, ++ -1, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:max-width-chars: ++ * ++ * The desired maximum width of the entry, in characters. ++ * If this property is set to -1, the width will be calculated ++ * automatically. ++ * ++ * Since: 3.12 ++ */ ++ entry_props[PROP_MAX_WIDTH_CHARS] = ++ g_param_spec_int ("max-width-chars", ++ P_("Maximum width in characters"), ++ P_("The desired maximum width of the entry, in characters"), ++ -1, G_MAXINT, ++ -1, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_SCROLL_OFFSET] = ++ g_param_spec_int ("scroll-offset", ++ P_("Scroll offset"), ++ P_("Number of pixels of the entry scrolled off the screen to the left"), ++ 0, G_MAXINT, ++ 0, ++ GTK_PARAM_READABLE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_TEXT] = ++ g_param_spec_string ("text", ++ P_("Text"), ++ P_("The contents of the entry"), ++ "", ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:xalign: ++ * ++ * The horizontal alignment, from 0 (left) to 1 (right). ++ * Reversed for RTL layouts. ++ * ++ * Since: 2.4 ++ */ ++ entry_props[PROP_XALIGN] = ++ g_param_spec_float ("xalign", ++ P_("X align"), ++ P_("The horizontal alignment, from 0 (left) to 1 (right). Reversed for RTL layouts."), ++ 0.0, 1.0, ++ 0.0, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:truncate-multiline: ++ * ++ * When %TRUE, pasted multi-line text is truncated to the first line. ++ * ++ * Since: 2.10 ++ */ ++ entry_props[PROP_TRUNCATE_MULTILINE] = ++ g_param_spec_boolean ("truncate-multiline", ++ P_("Truncate multiline"), ++ P_("Whether to truncate multiline pastes to one line."), ++ FALSE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:shadow-type: ++ * ++ * Which kind of shadow to draw around the entry when ++ * #GtkEntry:has-frame is set to %TRUE. ++ * ++ * Deprecated: 3.20: Use CSS to determine the style of the border; ++ * the value of this style property is ignored. ++ * ++ * Since: 2.12 ++ */ ++ entry_props[PROP_SHADOW_TYPE] = ++ g_param_spec_enum ("shadow-type", ++ P_("Shadow type"), ++ P_("Which kind of shadow to draw around the entry when has-frame is set"), ++ GTK_TYPE_SHADOW_TYPE, ++ GTK_SHADOW_IN, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED); ++ ++ /** ++ * GtkEntry:overwrite-mode: ++ * ++ * If text is overwritten when typing in the #GtkEntry. ++ * ++ * Since: 2.14 ++ */ ++ entry_props[PROP_OVERWRITE_MODE] = ++ g_param_spec_boolean ("overwrite-mode", ++ P_("Overwrite mode"), ++ P_("Whether new text overwrites existing text"), ++ FALSE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:text-length: ++ * ++ * The length of the text in the #GtkEntry. ++ * ++ * Since: 2.14 ++ */ ++ entry_props[PROP_TEXT_LENGTH] = ++ g_param_spec_uint ("text-length", ++ P_("Text length"), ++ P_("Length of the text currently in the entry"), ++ 0, G_MAXUINT16, ++ 0, ++ GTK_PARAM_READABLE); ++ ++ /** ++ * GtkEntry:invisible-char-set: ++ * ++ * Whether the invisible char has been set for the #GtkEntry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_INVISIBLE_CHAR_SET] = ++ g_param_spec_boolean ("invisible-char-set", ++ P_("Invisible character set"), ++ P_("Whether the invisible character has been set"), ++ FALSE, ++ GTK_PARAM_READWRITE); ++ ++ /** ++ * GtkEntry:caps-lock-warning: ++ * ++ * Whether password entries will show a warning when Caps Lock is on. ++ * ++ * Note that the warning is shown using a secondary icon, and thus ++ * does not work if you are using the secondary icon position for some ++ * other purpose. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_CAPS_LOCK_WARNING] = ++ g_param_spec_boolean ("caps-lock-warning", ++ P_("Caps Lock warning"), ++ P_("Whether password entries will show a warning when Caps Lock is on"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:progress-fraction: ++ * ++ * The current fraction of the task that's been completed. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_PROGRESS_FRACTION] = ++ g_param_spec_double ("progress-fraction", ++ P_("Progress Fraction"), ++ P_("The current fraction of the task that's been completed"), ++ 0.0, 1.0, ++ 0.0, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:progress-pulse-step: ++ * ++ * The fraction of total entry width to move the progress ++ * bouncing block for each call to gtk_entry_progress_pulse(). ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_PROGRESS_PULSE_STEP] = ++ g_param_spec_double ("progress-pulse-step", ++ P_("Progress Pulse Step"), ++ P_("The fraction of total entry width to move the progress bouncing block for each call to gtk_entry_progress_pulse()"), ++ 0.0, 1.0, ++ 0.1, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:placeholder-text: ++ * ++ * The text that will be displayed in the #GtkEntry when it is empty ++ * and unfocused. ++ * ++ * Since: 3.2 ++ */ ++ entry_props[PROP_PLACEHOLDER_TEXT] = ++ g_param_spec_string ("placeholder-text", ++ P_("Placeholder text"), ++ P_("Show text in the entry when it's empty and unfocused"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:primary-icon-pixbuf: ++ * ++ * A pixbuf to use as the primary icon for the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_PIXBUF_PRIMARY] = ++ g_param_spec_object ("primary-icon-pixbuf", ++ P_("Primary pixbuf"), ++ P_("Primary pixbuf for the entry"), ++ GDK_TYPE_PIXBUF, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:secondary-icon-pixbuf: ++ * ++ * An pixbuf to use as the secondary icon for the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_PIXBUF_SECONDARY] = ++ g_param_spec_object ("secondary-icon-pixbuf", ++ P_("Secondary pixbuf"), ++ P_("Secondary pixbuf for the entry"), ++ GDK_TYPE_PIXBUF, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:primary-icon-stock: ++ * ++ * The stock id to use for the primary icon for the entry. ++ * ++ * Since: 2.16 ++ * ++ * Deprecated: 3.10: Use #GtkEntry:primary-icon-name instead. ++ */ ++ entry_props[PROP_STOCK_PRIMARY] = ++ g_param_spec_string ("primary-icon-stock", ++ P_("Primary stock ID"), ++ P_("Stock ID for primary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED); ++ ++ /** ++ * GtkEntry:secondary-icon-stock: ++ * ++ * The stock id to use for the secondary icon for the entry. ++ * ++ * Since: 2.16 ++ * ++ * Deprecated: 3.10: Use #GtkEntry:secondary-icon-name instead. ++ */ ++ entry_props[PROP_STOCK_SECONDARY] = ++ g_param_spec_string ("secondary-icon-stock", ++ P_("Secondary stock ID"), ++ P_("Stock ID for secondary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED); ++ ++ /** ++ * GtkEntry:primary-icon-name: ++ * ++ * The icon name to use for the primary icon for the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_ICON_NAME_PRIMARY] = ++ g_param_spec_string ("primary-icon-name", ++ P_("Primary icon name"), ++ P_("Icon name for primary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:secondary-icon-name: ++ * ++ * The icon name to use for the secondary icon for the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_ICON_NAME_SECONDARY] = ++ g_param_spec_string ("secondary-icon-name", ++ P_("Secondary icon name"), ++ P_("Icon name for secondary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:primary-icon-gicon: ++ * ++ * The #GIcon to use for the primary icon for the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_GICON_PRIMARY] = ++ g_param_spec_object ("primary-icon-gicon", ++ P_("Primary GIcon"), ++ P_("GIcon for primary icon"), ++ G_TYPE_ICON, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:secondary-icon-gicon: ++ * ++ * The #GIcon to use for the secondary icon for the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_GICON_SECONDARY] = ++ g_param_spec_object ("secondary-icon-gicon", ++ P_("Secondary GIcon"), ++ P_("GIcon for secondary icon"), ++ G_TYPE_ICON, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:primary-icon-storage-type: ++ * ++ * The representation which is used for the primary icon of the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_STORAGE_TYPE_PRIMARY] = ++ g_param_spec_enum ("primary-icon-storage-type", ++ P_("Primary storage type"), ++ P_("The representation being used for primary icon"), ++ GTK_TYPE_IMAGE_TYPE, ++ GTK_IMAGE_EMPTY, ++ GTK_PARAM_READABLE); ++ ++ /** ++ * GtkEntry:secondary-icon-storage-type: ++ * ++ * The representation which is used for the secondary icon of the entry. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_STORAGE_TYPE_SECONDARY] = ++ g_param_spec_enum ("secondary-icon-storage-type", ++ P_("Secondary storage type"), ++ P_("The representation being used for secondary icon"), ++ GTK_TYPE_IMAGE_TYPE, ++ GTK_IMAGE_EMPTY, ++ GTK_PARAM_READABLE); ++ ++ /** ++ * GtkEntry:primary-icon-activatable: ++ * ++ * Whether the primary icon is activatable. ++ * ++ * GTK+ emits the #GtkEntry::icon-press and #GtkEntry::icon-release ++ * signals only on sensitive, activatable icons. ++ * ++ * Sensitive, but non-activatable icons can be used for purely ++ * informational purposes. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_ACTIVATABLE_PRIMARY] = ++ g_param_spec_boolean ("primary-icon-activatable", ++ P_("Primary icon activatable"), ++ P_("Whether the primary icon is activatable"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:secondary-icon-activatable: ++ * ++ * Whether the secondary icon is activatable. ++ * ++ * GTK+ emits the #GtkEntry::icon-press and #GtkEntry::icon-release ++ * signals only on sensitive, activatable icons. ++ * ++ * Sensitive, but non-activatable icons can be used for purely ++ * informational purposes. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_ACTIVATABLE_SECONDARY] = ++ g_param_spec_boolean ("secondary-icon-activatable", ++ P_("Secondary icon activatable"), ++ P_("Whether the secondary icon is activatable"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:primary-icon-sensitive: ++ * ++ * Whether the primary icon is sensitive. ++ * ++ * An insensitive icon appears grayed out. GTK+ does not emit the ++ * #GtkEntry::icon-press and #GtkEntry::icon-release signals and ++ * does not allow DND from insensitive icons. ++ * ++ * An icon should be set insensitive if the action that would trigger ++ * when clicked is currently not available. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_SENSITIVE_PRIMARY] = ++ g_param_spec_boolean ("primary-icon-sensitive", ++ P_("Primary icon sensitive"), ++ P_("Whether the primary icon is sensitive"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:secondary-icon-sensitive: ++ * ++ * Whether the secondary icon is sensitive. ++ * ++ * An insensitive icon appears grayed out. GTK+ does not emit the ++ * #GtkEntry::icon-press and #GtkEntry::icon-release signals and ++ * does not allow DND from insensitive icons. ++ * ++ * An icon should be set insensitive if the action that would trigger ++ * when clicked is currently not available. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_SENSITIVE_SECONDARY] = ++ g_param_spec_boolean ("secondary-icon-sensitive", ++ P_("Secondary icon sensitive"), ++ P_("Whether the secondary icon is sensitive"), ++ TRUE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:primary-icon-tooltip-text: ++ * ++ * The contents of the tooltip on the primary icon. ++ * ++ * Also see gtk_entry_set_icon_tooltip_text(). ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_TOOLTIP_TEXT_PRIMARY] = ++ g_param_spec_string ("primary-icon-tooltip-text", ++ P_("Primary icon tooltip text"), ++ P_("The contents of the tooltip on the primary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:secondary-icon-tooltip-text: ++ * ++ * The contents of the tooltip on the secondary icon. ++ * ++ * Also see gtk_entry_set_icon_tooltip_text(). ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_TOOLTIP_TEXT_SECONDARY] = ++ g_param_spec_string ("secondary-icon-tooltip-text", ++ P_("Secondary icon tooltip text"), ++ P_("The contents of the tooltip on the secondary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:primary-icon-tooltip-markup: ++ * ++ * The contents of the tooltip on the primary icon, which is marked up ++ * with the [Pango text markup language][PangoMarkupFormat]. ++ * ++ * Also see gtk_entry_set_icon_tooltip_markup(). ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_TOOLTIP_MARKUP_PRIMARY] = ++ g_param_spec_string ("primary-icon-tooltip-markup", ++ P_("Primary icon tooltip markup"), ++ P_("The contents of the tooltip on the primary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:secondary-icon-tooltip-markup: ++ * ++ * The contents of the tooltip on the secondary icon, which is marked up ++ * with the [Pango text markup language][PangoMarkupFormat]. ++ * ++ * Also see gtk_entry_set_icon_tooltip_markup(). ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_TOOLTIP_MARKUP_SECONDARY] = ++ g_param_spec_string ("secondary-icon-tooltip-markup", ++ P_("Secondary icon tooltip markup"), ++ P_("The contents of the tooltip on the secondary icon"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:im-module: ++ * ++ * Which IM (input method) module should be used for this entry. ++ * See #GtkIMContext. ++ * ++ * Setting this to a non-%NULL value overrides the ++ * system-wide IM module setting. See the GtkSettings ++ * #GtkSettings:gtk-im-module property. ++ * ++ * Since: 2.16 ++ */ ++ entry_props[PROP_IM_MODULE] = ++ g_param_spec_string ("im-module", ++ P_("IM module"), ++ P_("Which IM module should be used"), ++ NULL, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:completion: ++ * ++ * The auxiliary completion object to use with the entry. ++ * ++ * Since: 3.2 ++ */ ++ entry_props[PROP_COMPLETION] = ++ g_param_spec_object ("completion", ++ P_("Completion"), ++ P_("The auxiliary completion object"), ++ GTK_TYPE_ENTRY_COMPLETION, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:input-purpose: ++ * ++ * The purpose of this text field. ++ * ++ * This property can be used by on-screen keyboards and other input ++ * methods to adjust their behaviour. ++ * ++ * Note that setting the purpose to %GTK_INPUT_PURPOSE_PASSWORD or ++ * %GTK_INPUT_PURPOSE_PIN is independent from setting ++ * #GtkEntry:visibility. ++ * ++ * Since: 3.6 ++ */ ++ entry_props[PROP_INPUT_PURPOSE] = ++ g_param_spec_enum ("input-purpose", ++ P_("Purpose"), ++ P_("Purpose of the text field"), ++ GTK_TYPE_INPUT_PURPOSE, ++ GTK_INPUT_PURPOSE_FREE_FORM, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:input-hints: ++ * ++ * Additional hints (beyond #GtkEntry:input-purpose) that ++ * allow input methods to fine-tune their behaviour. ++ * ++ * Since: 3.6 ++ */ ++ entry_props[PROP_INPUT_HINTS] = ++ g_param_spec_flags ("input-hints", ++ P_("hints"), ++ P_("Hints for the text field behaviour"), ++ GTK_TYPE_INPUT_HINTS, ++ GTK_INPUT_HINT_NONE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:attributes: ++ * ++ * A list of Pango attributes to apply to the text of the entry. ++ * ++ * This is mainly useful to change the size or weight of the text. ++ * ++ * The #PangoAttribute's @start_index and @end_index must refer to the ++ * #GtkEntryBuffer text, i.e. without the preedit string. ++ * ++ * Since: 3.6 ++ */ ++ entry_props[PROP_ATTRIBUTES] = ++ g_param_spec_boxed ("attributes", ++ P_("Attributes"), ++ P_("A list of style attributes to apply to the text of the label"), ++ PANGO_TYPE_ATTR_LIST, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry:populate-all: ++ * ++ * If :populate-all is %TRUE, the #GtkEntry::populate-popup ++ * signal is also emitted for touch popups. ++ * ++ * Since: 3.8 ++ */ ++ entry_props[PROP_POPULATE_ALL] = ++ g_param_spec_boolean ("populate-all", ++ P_("Populate all"), ++ P_("Whether to emit ::populate-popup for touch popups"), ++ FALSE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry::tabs: ++ * ++ * A list of tabstops to apply to the text of the entry. ++ * ++ * Since: 3.8 ++ */ ++ entry_props[PROP_TABS] = ++ g_param_spec_boxed ("tabs", ++ P_("Tabs"), ++ P_("A list of tabstop locations to apply to the text of the entry"), ++ PANGO_TYPE_TAB_ARRAY, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkEntry::show-emoji-icon: ++ * ++ * When this is %TRUE, the entry will show an emoji icon in the secondary ++ * icon position that brings up the Emoji chooser when clicked. ++ * ++ * Since: 3.22.19 ++ */ ++ entry_props[PROP_SHOW_EMOJI_ICON] = ++ g_param_spec_boolean ("show-emoji-icon", ++ P_("Emoji icon"), ++ P_("Whether to show an icon for Emoji"), ++ FALSE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ entry_props[PROP_ENABLE_EMOJI_COMPLETION] = ++ g_param_spec_boolean ("enable-emoji-completion", ++ P_("Enable Emoji completion"), ++ P_("Whether to suggest Emoji replacements"), ++ FALSE, ++ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); ++ ++ g_object_class_install_properties (gobject_class, NUM_PROPERTIES, entry_props); ++ ++ /** ++ * GtkEntry:icon-prelight: ++ * ++ * The prelight style property determines whether activatable ++ * icons prelight on mouseover. ++ * ++ * Since: 2.16 ++ * ++ * Deprecated: 3.20: Use CSS to control the appearance of prelighted icons; ++ * the value of this style property is ignored. ++ */ ++ gtk_widget_class_install_style_property (widget_class, ++ g_param_spec_boolean ("icon-prelight", ++ P_("Icon Prelight"), ++ P_("Whether activatable icons should prelight when hovered"), ++ TRUE, ++ GTK_PARAM_READABLE|G_PARAM_DEPRECATED)); ++ ++ /** ++ * GtkEntry:progress-border: ++ * ++ * The border around the progress bar in the entry. ++ * ++ * Since: 2.16 ++ * ++ * Deprecated: 3.4: Use the standard margin CSS property (through objects ++ * like #GtkStyleContext and #GtkCssProvider); the value of this style ++ * property is ignored. ++ */ ++ gtk_widget_class_install_style_property (widget_class, ++ g_param_spec_boxed ("progress-border", ++ P_("Progress Border"), ++ P_("Border around the progress bar"), ++ GTK_TYPE_BORDER, ++ GTK_PARAM_READABLE|G_PARAM_DEPRECATED)); ++ ++ /** ++ * GtkEntry:invisible-char: ++ * ++ * The invisible character is used when masking entry contents (in ++ * \"password mode\")"). When it is not explicitly set with the ++ * #GtkEntry:invisible-char property, GTK+ determines the character ++ * to use from a list of possible candidates, depending on availability ++ * in the current font. ++ * ++ * This style property allows the theme to prepend a character ++ * to the list of candidates. ++ * ++ * Since: 2.18 ++ */ ++ gtk_widget_class_install_style_property (widget_class, ++ g_param_spec_unichar ("invisible-char", ++ P_("Invisible character"), ++ P_("The character to use when masking entry contents (in \"password mode\")"), ++ 0, ++ GTK_PARAM_READABLE)); ++ ++ /** ++ * GtkEntry::populate-popup: ++ * @entry: The entry on which the signal is emitted ++ * @widget: the container that is being populated ++ * ++ * The ::populate-popup signal gets emitted before showing the ++ * context menu of the entry. ++ * ++ * If you need to add items to the context menu, connect ++ * to this signal and append your items to the @widget, which ++ * will be a #GtkMenu in this case. ++ * ++ * If #GtkEntry:populate-all is %TRUE, this signal will ++ * also be emitted to populate touch popups. In this case, ++ * @widget will be a different container, e.g. a #GtkToolbar. ++ * The signal handler should not make assumptions about the ++ * type of @widget. ++ */ ++ signals[POPULATE_POPUP] = ++ g_signal_new (I_("populate-popup"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GtkEntryClass, populate_popup), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 1, ++ GTK_TYPE_WIDGET); ++ ++ /* Action signals */ ++ ++ /** ++ * GtkEntry::activate: ++ * @entry: The entry on which the signal is emitted ++ * ++ * The ::activate signal is emitted when the user hits ++ * the Enter key. ++ * ++ * While this signal is used as a ++ * [keybinding signal][GtkBindingSignal], ++ * it is also commonly used by applications to intercept ++ * activation of entries. ++ * ++ * The default bindings for this signal are all forms of the Enter key. ++ */ ++ signals[ACTIVATE] = ++ g_signal_new (I_("activate"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, activate), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ widget_class->activate_signal = signals[ACTIVATE]; ++ ++ /** ++ * GtkEntry::move-cursor: ++ * @entry: the object which received the signal ++ * @step: the granularity of the move, as a #GtkMovementStep ++ * @count: the number of @step units to move ++ * @extend_selection: %TRUE if the move should extend the selection ++ * ++ * The ::move-cursor signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user initiates a cursor movement. ++ * If the cursor is not visible in @entry, this signal causes ++ * the viewport to be moved instead. ++ * ++ * Applications should not connect to it, but may emit it with ++ * g_signal_emit_by_name() if they need to control the cursor ++ * programmatically. ++ * ++ * The default bindings for this signal come in two variants, ++ * the variant with the Shift modifier extends the selection, ++ * the variant without the Shift modifer does not. ++ * There are too many key combinations to list them all here. ++ * - Arrow keys move by individual characters/lines ++ * - Ctrl-arrow key combinations move by words/paragraphs ++ * - Home/End keys move to the ends of the buffer ++ */ ++ signals[MOVE_CURSOR] = ++ g_signal_new (I_("move-cursor"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, move_cursor), ++ NULL, NULL, ++ _gtk_marshal_VOID__ENUM_INT_BOOLEAN, ++ G_TYPE_NONE, 3, ++ GTK_TYPE_MOVEMENT_STEP, ++ G_TYPE_INT, ++ G_TYPE_BOOLEAN); ++ ++ /** ++ * GtkEntry::insert-at-cursor: ++ * @entry: the object which received the signal ++ * @string: the string to insert ++ * ++ * The ::insert-at-cursor signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user initiates the insertion of a ++ * fixed string at the cursor. ++ * ++ * This signal has no default bindings. ++ */ ++ signals[INSERT_AT_CURSOR] = ++ g_signal_new (I_("insert-at-cursor"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, insert_at_cursor), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 1, ++ G_TYPE_STRING); ++ ++ /** ++ * GtkEntry::delete-from-cursor: ++ * @entry: the object which received the signal ++ * @type: the granularity of the deletion, as a #GtkDeleteType ++ * @count: the number of @type units to delete ++ * ++ * The ::delete-from-cursor signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user initiates a text deletion. ++ * ++ * If the @type is %GTK_DELETE_CHARS, GTK+ deletes the selection ++ * if there is one, otherwise it deletes the requested number ++ * of characters. ++ * ++ * The default bindings for this signal are ++ * Delete for deleting a character and Ctrl-Delete for ++ * deleting a word. ++ */ ++ signals[DELETE_FROM_CURSOR] = ++ g_signal_new (I_("delete-from-cursor"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, delete_from_cursor), ++ NULL, NULL, ++ _gtk_marshal_VOID__ENUM_INT, ++ G_TYPE_NONE, 2, ++ GTK_TYPE_DELETE_TYPE, ++ G_TYPE_INT); ++ ++ /** ++ * GtkEntry::backspace: ++ * @entry: the object which received the signal ++ * ++ * The ::backspace signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * The default bindings for this signal are ++ * Backspace and Shift-Backspace. ++ */ ++ signals[BACKSPACE] = ++ g_signal_new (I_("backspace"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, backspace), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkEntry::cut-clipboard: ++ * @entry: the object which received the signal ++ * ++ * The ::cut-clipboard signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted to cut the selection to the clipboard. ++ * ++ * The default bindings for this signal are ++ * Ctrl-x and Shift-Delete. ++ */ ++ signals[CUT_CLIPBOARD] = ++ g_signal_new (I_("cut-clipboard"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, cut_clipboard), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkEntry::copy-clipboard: ++ * @entry: the object which received the signal ++ * ++ * The ::copy-clipboard signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted to copy the selection to the clipboard. ++ * ++ * The default bindings for this signal are ++ * Ctrl-c and Ctrl-Insert. ++ */ ++ signals[COPY_CLIPBOARD] = ++ g_signal_new (I_("copy-clipboard"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, copy_clipboard), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkEntry::paste-clipboard: ++ * @entry: the object which received the signal ++ * ++ * The ::paste-clipboard signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted to paste the contents of the clipboard ++ * into the text view. ++ * ++ * The default bindings for this signal are ++ * Ctrl-v and Shift-Insert. ++ */ ++ signals[PASTE_CLIPBOARD] = ++ g_signal_new (I_("paste-clipboard"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, paste_clipboard), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkEntry::toggle-overwrite: ++ * @entry: the object which received the signal ++ * ++ * The ::toggle-overwrite signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted to toggle the overwrite mode of the entry. ++ * ++ * The default bindings for this signal is Insert. ++ */ ++ signals[TOGGLE_OVERWRITE] = ++ g_signal_new (I_("toggle-overwrite"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, toggle_overwrite), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkEntry::icon-press: ++ * @entry: The entry on which the signal is emitted ++ * @icon_pos: The position of the clicked icon ++ * @event: the button press event ++ * ++ * The ::icon-press signal is emitted when an activatable icon ++ * is clicked. ++ * ++ * Since: 2.16 ++ */ ++ signals[ICON_PRESS] = ++ g_signal_new (I_("icon-press"), ++ G_TYPE_FROM_CLASS (gobject_class), ++ G_SIGNAL_RUN_LAST, ++ 0, ++ NULL, NULL, ++ _gtk_marshal_VOID__ENUM_BOXED, ++ G_TYPE_NONE, 2, ++ GTK_TYPE_ENTRY_ICON_POSITION, ++ GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); ++ ++ /** ++ * GtkEntry::icon-release: ++ * @entry: The entry on which the signal is emitted ++ * @icon_pos: The position of the clicked icon ++ * @event: the button release event ++ * ++ * The ::icon-release signal is emitted on the button release from a ++ * mouse click over an activatable icon. ++ * ++ * Since: 2.16 ++ */ ++ signals[ICON_RELEASE] = ++ g_signal_new (I_("icon-release"), ++ G_TYPE_FROM_CLASS (gobject_class), ++ G_SIGNAL_RUN_LAST, ++ 0, ++ NULL, NULL, ++ _gtk_marshal_VOID__ENUM_BOXED, ++ G_TYPE_NONE, 2, ++ GTK_TYPE_ENTRY_ICON_POSITION, ++ GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); ++ ++ /** ++ * GtkEntry::preedit-changed: ++ * @entry: the object which received the signal ++ * @preedit: the current preedit string ++ * ++ * If an input method is used, the typed text will not immediately ++ * be committed to the buffer. So if you are interested in the text, ++ * connect to this signal. ++ * ++ * Since: 2.20 ++ */ ++ signals[PREEDIT_CHANGED] = ++ g_signal_new_class_handler (I_("preedit-changed"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ NULL, ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 1, ++ G_TYPE_STRING); ++ ++ ++ /** ++ * GtkEntry::insert-emoji: ++ * @entry: the object which received the signal ++ * ++ * The ::insert-emoji signal is a ++ * [keybinding signal][GtkBindingSignal] ++ * which gets emitted to present the Emoji chooser for the @entry. ++ * ++ * The default bindings for this signal are Ctrl-. and Ctrl-; ++ * ++ * Since: 3.22.27 ++ */ ++ signals[INSERT_EMOJI] = ++ g_signal_new (I_("insert-emoji"), ++ G_OBJECT_CLASS_TYPE (gobject_class), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ G_STRUCT_OFFSET (GtkEntryClass, insert_emoji), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /* ++ * Key bindings ++ */ ++ ++ binding_set = gtk_binding_set_by_class (class); ++ ++ /* Moving the insertion point */ ++ add_move_binding (binding_set, GDK_KEY_Right, 0, ++ GTK_MOVEMENT_VISUAL_POSITIONS, 1); ++ ++ add_move_binding (binding_set, GDK_KEY_Left, 0, ++ GTK_MOVEMENT_VISUAL_POSITIONS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_Right, 0, ++ GTK_MOVEMENT_VISUAL_POSITIONS, 1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_Left, 0, ++ GTK_MOVEMENT_VISUAL_POSITIONS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_WORDS, 1); ++ ++ add_move_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_WORDS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_WORDS, 1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_WORDS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_Home, 0, ++ GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_End, 0, ++ GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_Home, 0, ++ GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_End, 0, ++ GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); ++ ++ add_move_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_BUFFER_ENDS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_BUFFER_ENDS, 1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_BUFFER_ENDS, -1); ++ ++ add_move_binding (binding_set, GDK_KEY_KP_End, GDK_CONTROL_MASK, ++ GTK_MOVEMENT_BUFFER_ENDS, 1); ++ ++ /* Select all ++ */ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ "move-cursor", 3, ++ GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, ++ G_TYPE_INT, -1, ++ G_TYPE_BOOLEAN, FALSE); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ "move-cursor", 3, ++ GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, ++ G_TYPE_INT, 1, ++ G_TYPE_BOOLEAN, TRUE); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, ++ "move-cursor", 3, ++ GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, ++ G_TYPE_INT, -1, ++ G_TYPE_BOOLEAN, FALSE); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, ++ "move-cursor", 3, ++ GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, ++ G_TYPE_INT, 1, ++ G_TYPE_BOOLEAN, TRUE); ++ /* Unselect all ++ */ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK, ++ "move-cursor", 3, ++ GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_VISUAL_POSITIONS, ++ G_TYPE_INT, 0, ++ G_TYPE_BOOLEAN, FALSE); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ "move-cursor", 3, ++ GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_VISUAL_POSITIONS, ++ G_TYPE_INT, 0, ++ G_TYPE_BOOLEAN, FALSE); ++ ++ /* Activate ++ */ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Return, 0, ++ "activate", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_ISO_Enter, 0, ++ "activate", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Enter, 0, ++ "activate", 0); ++ ++ /* Deleting text */ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, 0, ++ "delete-from-cursor", 2, ++ G_TYPE_ENUM, GTK_DELETE_CHARS, ++ G_TYPE_INT, 1); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, 0, ++ "delete-from-cursor", 2, ++ G_TYPE_ENUM, GTK_DELETE_CHARS, ++ G_TYPE_INT, 1); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0, ++ "backspace", 0); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_u, GDK_CONTROL_MASK, ++ "delete-from-cursor", 2, ++ G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, ++ G_TYPE_INT, -1); ++ ++ /* Make this do the same as Backspace, to help with mis-typing */ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK, ++ "backspace", 0); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_CONTROL_MASK, ++ "delete-from-cursor", 2, ++ G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, ++ G_TYPE_INT, 1); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_CONTROL_MASK, ++ "delete-from-cursor", 2, ++ G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, ++ G_TYPE_INT, 1); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_CONTROL_MASK, ++ "delete-from-cursor", 2, ++ G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, ++ G_TYPE_INT, -1); ++ ++ /* Cut/copy/paste */ ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_CONTROL_MASK, ++ "cut-clipboard", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_CONTROL_MASK, ++ "copy-clipboard", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_CONTROL_MASK, ++ "paste-clipboard", 0); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK, ++ "cut-clipboard", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_CONTROL_MASK, ++ "copy-clipboard", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK, ++ "paste-clipboard", 0); ++ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK, ++ "cut-clipboard", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_CONTROL_MASK, ++ "copy-clipboard", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SHIFT_MASK, ++ "paste-clipboard", 0); ++ ++ /* Overwrite */ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, 0, ++ "toggle-overwrite", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, 0, ++ "toggle-overwrite", 0); ++ ++ /** ++ * GtkEntry:inner-border: ++ * ++ * Sets the text area's border between the text and the frame. ++ * ++ * Since: 2.10 ++ * ++ * Deprecated: 3.4: Use the standard border and padding CSS properties ++ * (through objects like #GtkStyleContext and #GtkCssProvider); the value ++ * of this style property is ignored. ++ */ ++ gtk_widget_class_install_style_property (widget_class, ++ g_param_spec_boxed ("inner-border", ++ P_("Inner Border"), ++ P_("Border between text and frame."), ++ GTK_TYPE_BORDER, ++ GTK_PARAM_READABLE | ++ G_PARAM_DEPRECATED)); ++ /* Emoji */ ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_CONTROL_MASK, ++ "insert-emoji", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_CONTROL_MASK, ++ "insert-emoji", 0); ++ ++ gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ENTRY_ACCESSIBLE); ++ gtk_widget_class_set_css_name (widget_class, "entry"); ++} ++ ++static void ++gtk_entry_editable_init (GtkEditableInterface *iface) ++{ ++ iface->do_insert_text = gtk_entry_insert_text; ++ iface->do_delete_text = gtk_entry_delete_text; ++ iface->insert_text = gtk_entry_real_insert_text; ++ iface->delete_text = gtk_entry_real_delete_text; ++ iface->get_chars = gtk_entry_get_chars; ++ iface->set_selection_bounds = gtk_entry_set_selection_bounds; ++ iface->get_selection_bounds = gtk_entry_get_selection_bounds; ++ iface->set_position = gtk_entry_real_set_position; ++ iface->get_position = gtk_entry_get_position; ++} ++ ++static void ++gtk_entry_cell_editable_init (GtkCellEditableIface *iface) ++{ ++ iface->start_editing = gtk_entry_start_editing; ++} ++ ++/* for deprecated properties */ ++static void ++gtk_entry_do_set_inner_border (GtkEntry *entry, ++ const GtkBorder *border) ++{ ++ if (border) ++ g_object_set_qdata_full (G_OBJECT (entry), quark_inner_border, ++ gtk_border_copy (border), ++ (GDestroyNotify) gtk_border_free); ++ else ++ g_object_set_qdata (G_OBJECT (entry), quark_inner_border, NULL); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INNER_BORDER]); ++} ++ ++static const GtkBorder * ++gtk_entry_do_get_inner_border (GtkEntry *entry) ++{ ++ return g_object_get_qdata (G_OBJECT (entry), quark_inner_border); ++} ++ ++static void ++gtk_entry_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkEntry *entry = GTK_ENTRY (object); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ switch (prop_id) ++ { ++ case PROP_BUFFER: ++ gtk_entry_set_buffer (entry, g_value_get_object (value)); ++ break; ++ ++ case PROP_EDITABLE: ++ { ++ gboolean new_value = g_value_get_boolean (value); ++ GtkStyleContext *context = gtk_widget_get_style_context (GTK_WIDGET (entry)); ++ ++ if (new_value != priv->editable) ++ { ++ GtkWidget *widget = GTK_WIDGET (entry); ++ ++ if (!new_value) ++ { ++ gtk_entry_reset_im_context (entry); ++ if (gtk_widget_has_focus (widget)) ++ gtk_im_context_focus_out (priv->im_context); ++ ++ priv->preedit_length = 0; ++ priv->preedit_cursor = 0; ++ ++ gtk_style_context_remove_class (context, GTK_STYLE_CLASS_READ_ONLY); ++ } ++ else ++ { ++ gtk_style_context_add_class (context, GTK_STYLE_CLASS_READ_ONLY); ++ } ++ ++ priv->editable = new_value; ++ ++ if (new_value && gtk_widget_has_focus (widget)) ++ gtk_im_context_focus_in (priv->im_context); ++ ++ g_object_notify_by_pspec (object, pspec); ++ gtk_widget_queue_draw (widget); ++ } ++ } ++ break; ++ ++ case PROP_MAX_LENGTH: ++ gtk_entry_set_max_length (entry, g_value_get_int (value)); ++ break; ++ ++ case PROP_VISIBILITY: ++ gtk_entry_set_visibility (entry, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_HAS_FRAME: ++ gtk_entry_set_has_frame (entry, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_INNER_BORDER: ++ gtk_entry_do_set_inner_border (entry, g_value_get_boxed (value)); ++ break; ++ ++ case PROP_INVISIBLE_CHAR: ++ gtk_entry_set_invisible_char (entry, g_value_get_uint (value)); ++ break; ++ ++ case PROP_ACTIVATES_DEFAULT: ++ gtk_entry_set_activates_default (entry, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_WIDTH_CHARS: ++ gtk_entry_set_width_chars (entry, g_value_get_int (value)); ++ break; ++ ++ case PROP_MAX_WIDTH_CHARS: ++ gtk_entry_set_max_width_chars (entry, g_value_get_int (value)); ++ break; ++ ++ case PROP_TEXT: ++ gtk_entry_set_text (entry, g_value_get_string (value)); ++ break; ++ ++ case PROP_XALIGN: ++ gtk_entry_set_alignment (entry, g_value_get_float (value)); ++ break; ++ ++ case PROP_TRUNCATE_MULTILINE: ++ if (priv->truncate_multiline != g_value_get_boolean (value)) ++ { ++ priv->truncate_multiline = g_value_get_boolean (value); ++ g_object_notify_by_pspec (object, pspec); ++ } ++ break; ++ ++ case PROP_SHADOW_TYPE: ++ if (priv->shadow_type != g_value_get_enum (value)) ++ { ++ priv->shadow_type = g_value_get_enum (value); ++ g_object_notify_by_pspec (object, pspec); ++ } ++ break; ++ ++ case PROP_OVERWRITE_MODE: ++ gtk_entry_set_overwrite_mode (entry, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_INVISIBLE_CHAR_SET: ++ if (g_value_get_boolean (value)) ++ priv->invisible_char_set = TRUE; ++ else ++ gtk_entry_unset_invisible_char (entry); ++ break; ++ ++ case PROP_CAPS_LOCK_WARNING: ++ if (priv->caps_lock_warning != g_value_get_boolean (value)) ++ { ++ priv->caps_lock_warning = g_value_get_boolean (value); ++ g_object_notify_by_pspec (object, pspec); ++ } ++ break; ++ ++ case PROP_PROGRESS_FRACTION: ++ gtk_entry_set_progress_fraction (entry, g_value_get_double (value)); ++ break; ++ ++ case PROP_PROGRESS_PULSE_STEP: ++ gtk_entry_set_progress_pulse_step (entry, g_value_get_double (value)); ++ break; ++ ++ case PROP_PLACEHOLDER_TEXT: ++ gtk_entry_set_placeholder_text (entry, g_value_get_string (value)); ++ break; ++ ++ case PROP_PIXBUF_PRIMARY: ++ gtk_entry_set_icon_from_pixbuf (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_object (value)); ++ break; ++ ++ case PROP_PIXBUF_SECONDARY: ++ gtk_entry_set_icon_from_pixbuf (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_object (value)); ++ break; ++ ++ case PROP_STOCK_PRIMARY: ++ G_GNUC_BEGIN_IGNORE_DEPRECATIONS; ++ gtk_entry_set_icon_from_stock (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_string (value)); ++ G_GNUC_END_IGNORE_DEPRECATIONS; ++ break; ++ ++ case PROP_STOCK_SECONDARY: ++ G_GNUC_BEGIN_IGNORE_DEPRECATIONS; ++ gtk_entry_set_icon_from_stock (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_string (value)); ++ G_GNUC_END_IGNORE_DEPRECATIONS; ++ break; ++ ++ case PROP_ICON_NAME_PRIMARY: ++ gtk_entry_set_icon_from_icon_name (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_string (value)); ++ break; ++ ++ case PROP_ICON_NAME_SECONDARY: ++ gtk_entry_set_icon_from_icon_name (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_string (value)); ++ break; ++ ++ case PROP_GICON_PRIMARY: ++ gtk_entry_set_icon_from_gicon (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_object (value)); ++ break; ++ ++ case PROP_GICON_SECONDARY: ++ gtk_entry_set_icon_from_gicon (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_object (value)); ++ break; ++ ++ case PROP_ACTIVATABLE_PRIMARY: ++ gtk_entry_set_icon_activatable (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_boolean (value)); ++ break; ++ ++ case PROP_ACTIVATABLE_SECONDARY: ++ gtk_entry_set_icon_activatable (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_boolean (value)); ++ break; ++ ++ case PROP_SENSITIVE_PRIMARY: ++ gtk_entry_set_icon_sensitive (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_boolean (value)); ++ break; ++ ++ case PROP_SENSITIVE_SECONDARY: ++ gtk_entry_set_icon_sensitive (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_boolean (value)); ++ break; ++ ++ case PROP_TOOLTIP_TEXT_PRIMARY: ++ gtk_entry_set_icon_tooltip_text (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_string (value)); ++ break; ++ ++ case PROP_TOOLTIP_TEXT_SECONDARY: ++ gtk_entry_set_icon_tooltip_text (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_string (value)); ++ break; ++ ++ case PROP_TOOLTIP_MARKUP_PRIMARY: ++ gtk_entry_set_icon_tooltip_markup (entry, ++ GTK_ENTRY_ICON_PRIMARY, ++ g_value_get_string (value)); ++ break; ++ ++ case PROP_TOOLTIP_MARKUP_SECONDARY: ++ gtk_entry_set_icon_tooltip_markup (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ g_value_get_string (value)); ++ break; ++ ++ case PROP_IM_MODULE: ++ g_free (priv->im_module); ++ priv->im_module = g_value_dup_string (value); ++ if (GTK_IS_IM_MULTICONTEXT (priv->im_context)) ++ gtk_im_multicontext_set_context_id (GTK_IM_MULTICONTEXT (priv->im_context), priv->im_module); ++ g_object_notify_by_pspec (object, pspec); ++ break; ++ ++ case PROP_EDITING_CANCELED: ++ if (priv->editing_canceled != g_value_get_boolean (value)) ++ { ++ priv->editing_canceled = g_value_get_boolean (value); ++ g_object_notify (object, "editing-canceled"); ++ } ++ break; ++ ++ case PROP_COMPLETION: ++ gtk_entry_set_completion (entry, GTK_ENTRY_COMPLETION (g_value_get_object (value))); ++ break; ++ ++ case PROP_INPUT_PURPOSE: ++ gtk_entry_set_input_purpose (entry, g_value_get_enum (value)); ++ break; ++ ++ case PROP_INPUT_HINTS: ++ gtk_entry_set_input_hints (entry, g_value_get_flags (value)); ++ break; ++ ++ case PROP_ATTRIBUTES: ++ gtk_entry_set_attributes (entry, g_value_get_boxed (value)); ++ break; ++ ++ case PROP_POPULATE_ALL: ++ if (entry->priv->populate_all != g_value_get_boolean (value)) ++ { ++ entry->priv->populate_all = g_value_get_boolean (value); ++ g_object_notify_by_pspec (object, pspec); ++ } ++ break; ++ ++ case PROP_TABS: ++ gtk_entry_set_tabs (entry, g_value_get_boxed (value)); ++ break; ++ ++ case PROP_SHOW_EMOJI_ICON: ++ set_show_emoji_icon (entry, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_ENABLE_EMOJI_COMPLETION: ++ set_enable_emoji_completion (entry, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_SCROLL_OFFSET: ++ case PROP_CURSOR_POSITION: ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_entry_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkEntry *entry = GTK_ENTRY (object); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ switch (prop_id) ++ { ++ case PROP_BUFFER: ++ g_value_set_object (value, gtk_entry_get_buffer (entry)); ++ break; ++ ++ case PROP_CURSOR_POSITION: ++ g_value_set_int (value, priv->current_pos); ++ break; ++ ++ case PROP_SELECTION_BOUND: ++ g_value_set_int (value, priv->selection_bound); ++ break; ++ ++ case PROP_EDITABLE: ++ g_value_set_boolean (value, priv->editable); ++ break; ++ ++ case PROP_MAX_LENGTH: ++ g_value_set_int (value, gtk_entry_buffer_get_max_length (get_buffer (entry))); ++ break; ++ ++ case PROP_VISIBILITY: ++ g_value_set_boolean (value, priv->visible); ++ break; ++ ++ case PROP_HAS_FRAME: ++ g_value_set_boolean (value, gtk_entry_get_has_frame (entry)); ++ break; ++ ++ case PROP_INNER_BORDER: ++ g_value_set_boxed (value, gtk_entry_do_get_inner_border (entry)); ++ break; ++ ++ case PROP_INVISIBLE_CHAR: ++ g_value_set_uint (value, priv->invisible_char); ++ break; ++ ++ case PROP_ACTIVATES_DEFAULT: ++ g_value_set_boolean (value, priv->activates_default); ++ break; ++ ++ case PROP_WIDTH_CHARS: ++ g_value_set_int (value, priv->width_chars); ++ break; ++ ++ case PROP_MAX_WIDTH_CHARS: ++ g_value_set_int (value, priv->max_width_chars); ++ break; ++ ++ case PROP_SCROLL_OFFSET: ++ g_value_set_int (value, priv->scroll_offset); ++ break; ++ ++ case PROP_TEXT: ++ g_value_set_string (value, gtk_entry_get_text (entry)); ++ break; ++ ++ case PROP_XALIGN: ++ g_value_set_float (value, gtk_entry_get_alignment (entry)); ++ break; ++ ++ case PROP_TRUNCATE_MULTILINE: ++ g_value_set_boolean (value, priv->truncate_multiline); ++ break; ++ ++ case PROP_SHADOW_TYPE: ++ g_value_set_enum (value, priv->shadow_type); ++ break; ++ ++ case PROP_OVERWRITE_MODE: ++ g_value_set_boolean (value, priv->overwrite_mode); ++ break; ++ ++ case PROP_TEXT_LENGTH: ++ g_value_set_uint (value, gtk_entry_buffer_get_length (get_buffer (entry))); ++ break; ++ ++ case PROP_INVISIBLE_CHAR_SET: ++ g_value_set_boolean (value, priv->invisible_char_set); ++ break; ++ ++ case PROP_IM_MODULE: ++ g_value_set_string (value, priv->im_module); ++ break; ++ ++ case PROP_CAPS_LOCK_WARNING: ++ g_value_set_boolean (value, priv->caps_lock_warning); ++ break; ++ ++ case PROP_PROGRESS_FRACTION: ++ g_value_set_double (value, priv->progress_fraction); ++ break; ++ ++ case PROP_PROGRESS_PULSE_STEP: ++ g_value_set_double (value, priv->progress_pulse_fraction); ++ break; ++ ++ case PROP_PLACEHOLDER_TEXT: ++ g_value_set_string (value, gtk_entry_get_placeholder_text (entry)); ++ break; ++ ++ case PROP_PIXBUF_PRIMARY: ++ g_value_set_object (value, ++ gtk_entry_get_icon_pixbuf (entry, ++ GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_PIXBUF_SECONDARY: ++ g_value_set_object (value, ++ gtk_entry_get_icon_pixbuf (entry, ++ GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_STOCK_PRIMARY: ++ G_GNUC_BEGIN_IGNORE_DEPRECATIONS; ++ g_value_set_string (value, ++ gtk_entry_get_icon_stock (entry, ++ GTK_ENTRY_ICON_PRIMARY)); ++ G_GNUC_END_IGNORE_DEPRECATIONS; ++ break; ++ ++ case PROP_STOCK_SECONDARY: ++ G_GNUC_BEGIN_IGNORE_DEPRECATIONS; ++ g_value_set_string (value, ++ gtk_entry_get_icon_stock (entry, ++ GTK_ENTRY_ICON_SECONDARY)); ++ G_GNUC_END_IGNORE_DEPRECATIONS; ++ break; ++ ++ case PROP_ICON_NAME_PRIMARY: ++ g_value_set_string (value, ++ gtk_entry_get_icon_name (entry, ++ GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_ICON_NAME_SECONDARY: ++ g_value_set_string (value, ++ gtk_entry_get_icon_name (entry, ++ GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_GICON_PRIMARY: ++ g_value_set_object (value, ++ gtk_entry_get_icon_gicon (entry, ++ GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_GICON_SECONDARY: ++ g_value_set_object (value, ++ gtk_entry_get_icon_gicon (entry, ++ GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_STORAGE_TYPE_PRIMARY: ++ g_value_set_enum (value, ++ gtk_entry_get_icon_storage_type (entry, ++ GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_STORAGE_TYPE_SECONDARY: ++ g_value_set_enum (value, ++ gtk_entry_get_icon_storage_type (entry, ++ GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_ACTIVATABLE_PRIMARY: ++ g_value_set_boolean (value, ++ gtk_entry_get_icon_activatable (entry, GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_ACTIVATABLE_SECONDARY: ++ g_value_set_boolean (value, ++ gtk_entry_get_icon_activatable (entry, GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_SENSITIVE_PRIMARY: ++ g_value_set_boolean (value, ++ gtk_entry_get_icon_sensitive (entry, GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_SENSITIVE_SECONDARY: ++ g_value_set_boolean (value, ++ gtk_entry_get_icon_sensitive (entry, GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_TOOLTIP_TEXT_PRIMARY: ++ g_value_take_string (value, ++ gtk_entry_get_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_TOOLTIP_TEXT_SECONDARY: ++ g_value_take_string (value, ++ gtk_entry_get_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_TOOLTIP_MARKUP_PRIMARY: ++ g_value_take_string (value, ++ gtk_entry_get_icon_tooltip_markup (entry, GTK_ENTRY_ICON_PRIMARY)); ++ break; ++ ++ case PROP_TOOLTIP_MARKUP_SECONDARY: ++ g_value_take_string (value, ++ gtk_entry_get_icon_tooltip_markup (entry, GTK_ENTRY_ICON_SECONDARY)); ++ break; ++ ++ case PROP_EDITING_CANCELED: ++ g_value_set_boolean (value, ++ priv->editing_canceled); ++ break; ++ ++ case PROP_COMPLETION: ++ g_value_set_object (value, G_OBJECT (gtk_entry_get_completion (entry))); ++ break; ++ ++ case PROP_INPUT_PURPOSE: ++ g_value_set_enum (value, gtk_entry_get_input_purpose (entry)); ++ break; ++ ++ case PROP_INPUT_HINTS: ++ g_value_set_flags (value, gtk_entry_get_input_hints (entry)); ++ break; ++ ++ case PROP_ATTRIBUTES: ++ g_value_set_boxed (value, priv->attrs); ++ break; ++ ++ case PROP_POPULATE_ALL: ++ g_value_set_boolean (value, priv->populate_all); ++ break; ++ ++ case PROP_TABS: ++ g_value_set_boxed (value, priv->tabs); ++ break; ++ ++ case PROP_SHOW_EMOJI_ICON: ++ g_value_set_boolean (value, priv->show_emoji_icon); ++ break; ++ ++ case PROP_ENABLE_EMOJI_COMPLETION: ++ g_value_set_boolean (value, priv->enable_emoji_completion); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static gunichar ++find_invisible_char (GtkWidget *widget) ++{ ++ PangoLayout *layout; ++ PangoAttrList *attr_list; ++ gint i; ++ gunichar invisible_chars [] = { ++ 0, ++ 0x25cf, /* BLACK CIRCLE */ ++ 0x2022, /* BULLET */ ++ 0x2731, /* HEAVY ASTERISK */ ++ 0x273a /* SIXTEEN POINTED ASTERISK */ ++ }; ++ ++ gtk_widget_style_get (widget, ++ "invisible-char", &invisible_chars[0], ++ NULL); ++ ++ layout = gtk_widget_create_pango_layout (widget, NULL); ++ ++ attr_list = pango_attr_list_new (); ++ pango_attr_list_insert (attr_list, pango_attr_fallback_new (FALSE)); ++ ++ pango_layout_set_attributes (layout, attr_list); ++ pango_attr_list_unref (attr_list); ++ ++ for (i = (invisible_chars[0] != 0 ? 0 : 1); i < G_N_ELEMENTS (invisible_chars); i++) ++ { ++ gchar text[7] = { 0, }; ++ gint len, count; ++ ++ len = g_unichar_to_utf8 (invisible_chars[i], text); ++ pango_layout_set_text (layout, text, len); ++ ++ count = pango_layout_get_unknown_glyphs_count (layout); ++ ++ if (count == 0) ++ { ++ g_object_unref (layout); ++ return invisible_chars[i]; ++ } ++ } ++ ++ g_object_unref (layout); ++ ++ return '*'; ++} ++ ++static void ++gtk_entry_init (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv; ++ GtkCssNode *widget_node; ++ gint i; ++ ++ entry->priv = gtk_entry_get_instance_private (entry); ++ priv = entry->priv; ++ ++ gtk_widget_set_can_focus (GTK_WIDGET (entry), TRUE); ++ gtk_widget_set_has_window (GTK_WIDGET (entry), FALSE); ++ ++ priv->editable = TRUE; ++ priv->visible = TRUE; ++ priv->dnd_position = -1; ++ priv->width_chars = -1; ++ priv->max_width_chars = -1; ++ priv->editing_canceled = FALSE; ++ priv->truncate_multiline = FALSE; ++ priv->shadow_type = GTK_SHADOW_IN; ++ priv->xalign = 0.0; ++ priv->caps_lock_warning = TRUE; ++ priv->caps_lock_warning_shown = FALSE; ++ priv->progress_fraction = 0.0; ++ priv->progress_pulse_fraction = 0.1; ++ ++ gtk_drag_dest_set (GTK_WIDGET (entry), 0, NULL, 0, ++ GDK_ACTION_COPY | GDK_ACTION_MOVE); ++ gtk_drag_dest_add_text_targets (GTK_WIDGET (entry)); ++ ++ /* This object is completely private. No external entity can gain a reference ++ * to it; so we create it here and destroy it in finalize(). ++ */ ++ priv->im_context = gtk_im_multicontext_new (); ++ ++ g_signal_connect (priv->im_context, "commit", ++ G_CALLBACK (gtk_entry_commit_cb), entry); ++ g_signal_connect (priv->im_context, "preedit-changed", ++ G_CALLBACK (gtk_entry_preedit_changed_cb), entry); ++ g_signal_connect (priv->im_context, "retrieve-surrounding", ++ G_CALLBACK (gtk_entry_retrieve_surrounding_cb), entry); ++ g_signal_connect (priv->im_context, "delete-surrounding", ++ G_CALLBACK (gtk_entry_delete_surrounding_cb), entry); ++ ++ gtk_entry_update_cached_style_values (entry); ++ ++ priv->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (entry)); ++ g_signal_connect (priv->drag_gesture, "drag-update", ++ G_CALLBACK (gtk_entry_drag_gesture_update), entry); ++ g_signal_connect (priv->drag_gesture, "drag-end", ++ G_CALLBACK (gtk_entry_drag_gesture_end), entry); ++ gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->drag_gesture), 0); ++ gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->drag_gesture), TRUE); ++ ++ priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (entry)); ++ g_signal_connect (priv->multipress_gesture, "pressed", ++ G_CALLBACK (gtk_entry_multipress_gesture_pressed), entry); ++ gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->multipress_gesture), 0); ++ gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->multipress_gesture), TRUE); ++ ++ widget_node = gtk_widget_get_css_node (GTK_WIDGET (entry)); ++ priv->gadget = gtk_css_custom_gadget_new_for_node (widget_node, ++ GTK_WIDGET (entry), ++ gtk_entry_measure, ++ gtk_entry_allocate, ++ gtk_entry_render, ++ NULL, ++ NULL); ++ ++ for (i = 0; i < 2; i++) ++ { ++ priv->undershoot_node[i] = gtk_css_node_new (); ++ gtk_css_node_set_name (priv->undershoot_node[i], I_("undershoot")); ++ gtk_css_node_add_class (priv->undershoot_node[i], g_quark_from_static_string (i == 0 ? GTK_STYLE_CLASS_LEFT : GTK_STYLE_CLASS_RIGHT)); ++ gtk_css_node_set_parent (priv->undershoot_node[i], widget_node); ++ gtk_css_node_set_state (priv->undershoot_node[i], gtk_css_node_get_state (widget_node) & ~GTK_STATE_FLAG_DROP_ACTIVE); ++ g_object_unref (priv->undershoot_node[i]); ++ } ++} ++ ++static void ++gtk_entry_ensure_magnifier (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->magnifier_popover) ++ return; ++ ++ priv->magnifier = _gtk_magnifier_new (GTK_WIDGET (entry)); ++ gtk_widget_set_size_request (priv->magnifier, 100, 60); ++ _gtk_magnifier_set_magnification (GTK_MAGNIFIER (priv->magnifier), 2.0); ++ priv->magnifier_popover = gtk_popover_new (GTK_WIDGET (entry)); ++ gtk_style_context_add_class (gtk_widget_get_style_context (priv->magnifier_popover), ++ "magnifier"); ++ gtk_popover_set_modal (GTK_POPOVER (priv->magnifier_popover), FALSE); ++ gtk_container_add (GTK_CONTAINER (priv->magnifier_popover), ++ priv->magnifier); ++ gtk_container_set_border_width (GTK_CONTAINER (priv->magnifier_popover), 4); ++ gtk_widget_show (priv->magnifier); ++} ++ ++static void ++gtk_entry_ensure_text_handles (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->text_handle) ++ return; ++ ++ priv->text_handle = _gtk_text_handle_new (GTK_WIDGET (entry)); ++ g_signal_connect (priv->text_handle, "drag-started", ++ G_CALLBACK (gtk_entry_handle_drag_started), entry); ++ g_signal_connect (priv->text_handle, "handle-dragged", ++ G_CALLBACK (gtk_entry_handle_dragged), entry); ++ g_signal_connect (priv->text_handle, "drag-finished", ++ G_CALLBACK (gtk_entry_handle_drag_finished), entry); ++} ++ ++static gint ++get_icon_width (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ EntryIconInfo *icon_info = entry->priv->icons[icon_pos]; ++ gint width; ++ ++ if (!icon_info) ++ return 0; ++ ++ gtk_css_gadget_get_preferred_size (icon_info->gadget, ++ GTK_ORIENTATION_HORIZONTAL, ++ -1, ++ &width, NULL, ++ NULL, NULL); ++ ++ return width; ++} ++ ++static void ++begin_change (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ priv->change_count++; ++ ++ g_object_freeze_notify (G_OBJECT (entry)); ++} ++ ++static void ++end_change (GtkEntry *entry) ++{ ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ g_return_if_fail (priv->change_count > 0); ++ ++ g_object_thaw_notify (G_OBJECT (entry)); ++ ++ priv->change_count--; ++ ++ if (priv->change_count == 0) ++ { ++ if (priv->real_changed) ++ { ++ g_signal_emit_by_name (editable, "changed"); ++ priv->real_changed = FALSE; ++ } ++ } ++} ++ ++static void ++emit_changed (GtkEntry *entry) ++{ ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->change_count == 0) ++ g_signal_emit_by_name (editable, "changed"); ++ else ++ priv->real_changed = TRUE; ++} ++ ++static void ++gtk_entry_destroy (GtkWidget *widget) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ priv->current_pos = priv->selection_bound = 0; ++ gtk_entry_reset_im_context (entry); ++ gtk_entry_reset_layout (entry); ++ ++ if (priv->blink_timeout) ++ { ++ g_source_remove (priv->blink_timeout); ++ priv->blink_timeout = 0; ++ } ++ ++ if (priv->magnifier) ++ _gtk_magnifier_set_inspected (GTK_MAGNIFIER (priv->magnifier), NULL); ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->destroy (widget); ++} ++ ++static void ++gtk_entry_dispose (GObject *object) ++{ ++ GtkEntry *entry = GTK_ENTRY (object); ++ GtkEntryPrivate *priv = entry->priv; ++ GdkKeymap *keymap; ++ ++ gtk_entry_set_icon_from_pixbuf (entry, GTK_ENTRY_ICON_PRIMARY, NULL); ++ gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_PRIMARY, NULL); ++ gtk_entry_set_icon_from_pixbuf (entry, GTK_ENTRY_ICON_SECONDARY, NULL); ++ gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_SECONDARY, NULL); ++ gtk_entry_set_completion (entry, NULL); ++ ++ priv->current_pos = 0; ++ ++ if (priv->buffer) ++ { ++ buffer_disconnect_signals (entry); ++ g_object_unref (priv->buffer); ++ priv->buffer = NULL; ++ } ++ ++ keymap = gdk_keymap_get_for_display (gtk_widget_get_display (GTK_WIDGET (object))); ++ g_signal_handlers_disconnect_by_func (keymap, keymap_state_changed, entry); ++ g_signal_handlers_disconnect_by_func (keymap, keymap_direction_changed, entry); ++ G_OBJECT_CLASS (gtk_entry_parent_class)->dispose (object); ++} ++ ++static void ++gtk_entry_finalize (GObject *object) ++{ ++ GtkEntry *entry = GTK_ENTRY (object); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = NULL; ++ gint i; ++ ++ if (priv->tick_id) ++ gtk_widget_remove_tick_callback (GTK_WIDGET (entry), priv->tick_id); ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ icon_info = priv->icons[i]; ++ if (icon_info == NULL) ++ continue; ++ ++ if (icon_info->target_list != NULL) ++ gtk_target_list_unref (icon_info->target_list); ++ ++ g_clear_object (&icon_info->gadget); ++ ++ g_slice_free (EntryIconInfo, icon_info); ++ } ++ ++ if (priv->cached_layout) ++ g_object_unref (priv->cached_layout); ++ ++ g_object_unref (priv->im_context); ++ ++ if (priv->blink_timeout) ++ g_source_remove (priv->blink_timeout); ++ ++ if (priv->selection_bubble) ++ gtk_widget_destroy (priv->selection_bubble); ++ ++ if (priv->magnifier_popover) ++ gtk_widget_destroy (priv->magnifier_popover); ++ ++ if (priv->text_handle) ++ g_object_unref (priv->text_handle); ++ g_free (priv->placeholder_text); ++ g_free (priv->im_module); ++ ++ g_clear_object (&priv->drag_gesture); ++ g_clear_object (&priv->multipress_gesture); ++ ++ if (priv->tabs) ++ pango_tab_array_free (priv->tabs); ++ ++ if (priv->attrs) ++ pango_attr_list_unref (priv->attrs); ++ ++ g_clear_object (&priv->progress_gadget); ++ g_clear_object (&priv->gadget); ++ ++ G_OBJECT_CLASS (gtk_entry_parent_class)->finalize (object); ++} ++ ++static DisplayMode ++gtk_entry_get_display_mode (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->visible) ++ return DISPLAY_NORMAL; ++ ++ if (priv->invisible_char == 0 && priv->invisible_char_set) ++ return DISPLAY_BLANK; ++ ++ return DISPLAY_INVISIBLE; ++} ++ ++gchar* ++_gtk_entry_get_display_text (GtkEntry *entry, ++ gint start_pos, ++ gint end_pos) ++{ ++ GtkEntryPasswordHint *password_hint; ++ GtkEntryPrivate *priv; ++ gunichar invisible_char; ++ const gchar *start; ++ const gchar *end; ++ const gchar *text; ++ gchar char_str[7]; ++ gint char_len; ++ GString *str; ++ guint length; ++ gint i; ++ ++ priv = entry->priv; ++ text = gtk_entry_buffer_get_text (get_buffer (entry)); ++ length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ ++ if (end_pos < 0 || end_pos > length) ++ end_pos = length; ++ if (start_pos > length) ++ start_pos = length; ++ ++ if (end_pos <= start_pos) ++ return g_strdup (""); ++ else if (priv->visible) ++ { ++ start = g_utf8_offset_to_pointer (text, start_pos); ++ end = g_utf8_offset_to_pointer (start, end_pos - start_pos); ++ return g_strndup (start, end - start); ++ } ++ else ++ { ++ str = g_string_sized_new (length * 2); ++ ++ /* Figure out what our invisible char is and encode it */ ++ if (!priv->invisible_char) ++ invisible_char = priv->invisible_char_set ? ' ' : '*'; ++ else ++ invisible_char = priv->invisible_char; ++ char_len = g_unichar_to_utf8 (invisible_char, char_str); ++ ++ /* ++ * Add hidden characters for each character in the text ++ * buffer. If there is a password hint, then keep that ++ * character visible. ++ */ ++ ++ password_hint = g_object_get_qdata (G_OBJECT (entry), quark_password_hint); ++ for (i = start_pos; i < end_pos; ++i) ++ { ++ if (password_hint && i == password_hint->position) ++ { ++ start = g_utf8_offset_to_pointer (text, i); ++ g_string_append_len (str, start, g_utf8_next_char (start) - start); ++ } ++ else ++ { ++ g_string_append_len (str, char_str, char_len); ++ } ++ } ++ ++ return g_string_free (str, FALSE); ++ } ++} ++ ++static void ++update_cursors (GtkWidget *widget) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = NULL; ++ GdkDisplay *display; ++ GdkCursor *cursor; ++ gint i; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if ((icon_info = priv->icons[i]) != NULL) ++ { ++ if (!_gtk_icon_helper_get_is_empty (GTK_ICON_HELPER (icon_info->gadget)) && ++ icon_info->window != NULL) ++ gdk_window_show_unraised (icon_info->window); ++ ++ /* The icon windows are not children of the visible entry window, ++ * thus we can't just inherit the xterm cursor. Slight complication ++ * here is that for the entry, insensitive => arrow cursor, but for ++ * an icon in a sensitive entry, insensitive => xterm cursor. ++ */ ++ if (gtk_widget_is_sensitive (widget) && ++ (icon_info->insensitive || ++ (icon_info->nonactivatable && icon_info->target_list == NULL))) ++ { ++ display = gtk_widget_get_display (widget); ++ cursor = gdk_cursor_new_from_name (display, "text"); ++ gdk_window_set_cursor (icon_info->window, cursor); ++ g_clear_object (&cursor); ++ } ++ else ++ { ++ gdk_window_set_cursor (icon_info->window, NULL); ++ } ++ } ++ } ++} ++ ++static void ++realize_icon_info (GtkWidget *widget, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = priv->icons[icon_pos]; ++ GdkWindowAttr attributes; ++ gint attributes_mask; ++ ++ g_return_if_fail (icon_info != NULL); ++ ++ attributes.x = 0; ++ attributes.y = 0; ++ attributes.width = 1; ++ attributes.height = 1; ++ attributes.window_type = GDK_WINDOW_CHILD; ++ attributes.wclass = GDK_INPUT_ONLY; ++ attributes.event_mask = gtk_widget_get_events (widget); ++ attributes.event_mask |= (GDK_BUTTON_PRESS_MASK | ++ GDK_BUTTON_RELEASE_MASK | ++ GDK_BUTTON1_MOTION_MASK | ++ GDK_BUTTON3_MOTION_MASK | ++ GDK_POINTER_MOTION_MASK | ++ GDK_ENTER_NOTIFY_MASK | ++ GDK_LEAVE_NOTIFY_MASK); ++ attributes_mask = GDK_WA_X | GDK_WA_Y; ++ ++ icon_info->window = gdk_window_new (gtk_widget_get_window (widget), ++ &attributes, ++ attributes_mask); ++ gtk_widget_register_window (widget, icon_info->window); ++ ++ gtk_widget_queue_resize (widget); ++} ++ ++static void ++update_icon_style (GtkWidget *widget, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = priv->icons[icon_pos]; ++ const gchar *sides[2] = { GTK_STYLE_CLASS_LEFT, GTK_STYLE_CLASS_RIGHT }; ++ ++ if (icon_info == NULL) ++ return; ++ ++ if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ++ icon_pos = 1 - icon_pos; ++ ++ gtk_css_gadget_add_class (icon_info->gadget, sides[icon_pos]); ++ gtk_css_gadget_remove_class (icon_info->gadget, sides[1 - icon_pos]); ++} ++ ++static void ++update_icon_state (GtkWidget *widget, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = priv->icons[icon_pos]; ++ GtkStateFlags state; ++ ++ if (icon_info == NULL) ++ return; ++ ++ state = gtk_widget_get_state_flags (widget); ++ state &= ~(GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_DROP_ACTIVE); ++ ++ if ((state & GTK_STATE_FLAG_INSENSITIVE) || icon_info->insensitive) ++ state |= GTK_STATE_FLAG_INSENSITIVE; ++ else if (icon_info->prelight) ++ state |= GTK_STATE_FLAG_PRELIGHT; ++ ++ gtk_css_gadget_set_state (icon_info->gadget, state); ++} ++ ++static void ++update_node_state (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkStateFlags state; ++ ++ state = gtk_widget_get_state_flags (GTK_WIDGET (entry)); ++ state &= ~GTK_STATE_FLAG_DROP_ACTIVE; ++ ++ if (priv->progress_gadget) ++ gtk_css_gadget_set_state (priv->progress_gadget, state); ++ if (priv->selection_node) ++ gtk_css_node_set_state (priv->selection_node, state); ++ ++ gtk_css_node_set_state (priv->undershoot_node[0], state); ++ gtk_css_node_set_state (priv->undershoot_node[1], state); ++} ++ ++static void ++update_node_ordering (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info; ++ GtkEntryIconPosition icon_pos; ++ GtkCssNode *sibling, *parent; ++ ++ if (priv->progress_gadget) ++ { ++ gtk_css_node_insert_before (gtk_css_gadget_get_node (priv->gadget), ++ gtk_css_gadget_get_node (priv->progress_gadget), ++ NULL); ++ } ++ ++ if (gtk_widget_get_direction (GTK_WIDGET (entry)) == GTK_TEXT_DIR_RTL) ++ icon_pos = GTK_ENTRY_ICON_SECONDARY; ++ else ++ icon_pos = GTK_ENTRY_ICON_PRIMARY; ++ ++ icon_info = priv->icons[icon_pos]; ++ if (icon_info) ++ { ++ GtkCssNode *node; ++ ++ node = gtk_css_gadget_get_node (icon_info->gadget); ++ parent = gtk_css_node_get_parent (node); ++ sibling = gtk_css_node_get_first_child (parent); ++ if (node != sibling) ++ gtk_css_node_insert_before (parent, node, sibling); ++ } ++} ++ ++static EntryIconInfo* ++construct_icon_info (GtkWidget *widget, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info; ++ GtkCssNode *widget_node; ++ ++ g_return_val_if_fail (priv->icons[icon_pos] == NULL, NULL); ++ ++ icon_info = g_slice_new0 (EntryIconInfo); ++ priv->icons[icon_pos] = icon_info; ++ ++ widget_node = gtk_css_gadget_get_node (priv->gadget); ++ icon_info->gadget = gtk_icon_helper_new_named ("image", widget); ++ _gtk_icon_helper_set_force_scale_pixbuf (GTK_ICON_HELPER (icon_info->gadget), TRUE); ++ gtk_css_node_set_parent (gtk_css_gadget_get_node (icon_info->gadget), widget_node); ++ ++ update_icon_state (widget, icon_pos); ++ update_icon_style (widget, icon_pos); ++ update_node_ordering (entry); ++ ++ if (gtk_widget_get_realized (widget)) ++ realize_icon_info (widget, icon_pos); ++ ++ return icon_info; ++} ++ ++static void ++gtk_entry_map (GtkWidget *widget) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = NULL; ++ gint i; ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->map (widget); ++ ++ gdk_window_show (priv->text_area); ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if ((icon_info = priv->icons[i]) != NULL) ++ { ++ if (!_gtk_icon_helper_get_is_empty (GTK_ICON_HELPER (icon_info->gadget)) && ++ icon_info->window != NULL) ++ gdk_window_show (icon_info->window); ++ } ++ } ++ ++ update_cursors (widget); ++} ++ ++static void ++gtk_entry_unmap (GtkWidget *widget) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = NULL; ++ gint i; ++ ++ if (priv->text_handle) ++ _gtk_text_handle_set_mode (priv->text_handle, ++ GTK_TEXT_HANDLE_MODE_NONE); ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if ((icon_info = priv->icons[i]) != NULL) ++ { ++ if (!_gtk_icon_helper_get_is_empty (GTK_ICON_HELPER (icon_info->gadget)) && ++ icon_info->window != NULL) ++ gdk_window_hide (icon_info->window); ++ } ++ } ++ ++ gdk_window_hide (priv->text_area); ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->unmap (widget); ++} ++ ++static void ++gtk_entry_realize (GtkWidget *widget) ++{ ++ GtkEntry *entry; ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ GdkWindowAttr attributes; ++ gint attributes_mask; ++ int i; ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->realize (widget); ++ ++ entry = GTK_ENTRY (widget); ++ priv = entry->priv; ++ ++ attributes.window_type = GDK_WINDOW_CHILD; ++ attributes.wclass = GDK_INPUT_ONLY; ++ attributes.event_mask = gtk_widget_get_events (widget); ++ attributes.event_mask |= (GDK_BUTTON_PRESS_MASK | ++ GDK_BUTTON_RELEASE_MASK | ++ GDK_BUTTON1_MOTION_MASK | ++ GDK_BUTTON3_MOTION_MASK | ++ GDK_POINTER_MOTION_MASK | ++ GDK_ENTER_NOTIFY_MASK | ++ GDK_LEAVE_NOTIFY_MASK); ++ attributes_mask = GDK_WA_X | GDK_WA_Y; ++ ++ attributes.x = priv->text_allocation.x; ++ attributes.y = priv->text_allocation.y; ++ attributes.width = priv->text_allocation.width; ++ attributes.height = priv->text_allocation.height; ++ ++ if (gtk_widget_is_sensitive (widget)) ++ { ++ attributes.cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text"); ++ attributes_mask |= GDK_WA_CURSOR; ++ } ++ ++ priv->text_area = gdk_window_new (gtk_widget_get_window (widget), ++ &attributes, ++ attributes_mask); ++ ++ gtk_widget_register_window (widget, priv->text_area); ++ ++ if (attributes_mask & GDK_WA_CURSOR) ++ g_clear_object (&attributes.cursor); ++ ++ gtk_im_context_set_client_window (priv->im_context, priv->text_area); ++ ++ gtk_entry_adjust_scroll (entry); ++ gtk_entry_update_primary_selection (entry); ++ ++ /* If the icon positions are already setup, create their windows. ++ * Otherwise if they don't exist yet, then construct_icon_info() ++ * will create the windows once the widget is already realized. ++ */ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if ((icon_info = priv->icons[i]) != NULL) ++ { ++ if (icon_info->window == NULL) ++ realize_icon_info (widget, i); ++ } ++ } ++} ++ ++static void ++gtk_entry_unrealize (GtkWidget *widget) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GtkClipboard *clipboard; ++ EntryIconInfo *icon_info; ++ gint i; ++ ++ gtk_entry_reset_layout (entry); ++ ++ gtk_im_context_set_client_window (priv->im_context, NULL); ++ ++ clipboard = gtk_widget_get_clipboard (widget, GDK_SELECTION_PRIMARY); ++ if (gtk_clipboard_get_owner (clipboard) == G_OBJECT (entry)) ++ gtk_clipboard_clear (clipboard); ++ ++ if (priv->text_area) ++ { ++ gtk_widget_unregister_window (widget, priv->text_area); ++ gdk_window_destroy (priv->text_area); ++ priv->text_area = NULL; ++ } ++ ++ if (priv->popup_menu) ++ { ++ gtk_widget_destroy (priv->popup_menu); ++ priv->popup_menu = NULL; ++ } ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->unrealize (widget); ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if ((icon_info = priv->icons[i]) != NULL) ++ { ++ if (icon_info->window != NULL) ++ { ++ gtk_widget_unregister_window (widget, icon_info->window); ++ gdk_window_destroy (icon_info->window); ++ icon_info->window = NULL; ++ } ++ } ++ } ++} ++ ++static void ++gtk_entry_get_preferred_width (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_css_gadget_get_preferred_size (GTK_ENTRY (widget)->priv->gadget, ++ GTK_ORIENTATION_HORIZONTAL, ++ -1, ++ minimum, natural, ++ NULL, NULL); ++} ++ ++static void ++gtk_entry_get_preferred_height (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_css_gadget_get_preferred_size (GTK_ENTRY (widget)->priv->gadget, ++ GTK_ORIENTATION_VERTICAL, ++ -1, ++ minimum, natural, ++ NULL, NULL); ++} ++ ++static void ++gtk_entry_get_preferred_height_and_baseline_for_width (GtkWidget *widget, ++ gint width, ++ gint *minimum, ++ gint *natural, ++ gint *minimum_baseline, ++ gint *natural_baseline) ++{ ++ gtk_css_gadget_get_preferred_size (GTK_ENTRY (widget)->priv->gadget, ++ GTK_ORIENTATION_VERTICAL, ++ width, ++ minimum, natural, ++ minimum_baseline, natural_baseline); ++} ++ ++static void ++gtk_entry_measure (GtkCssGadget *gadget, ++ GtkOrientation orientation, ++ int for_size, ++ int *minimum, ++ int *natural, ++ int *minimum_baseline, ++ int *natural_baseline, ++ gpointer unused) ++{ ++ GtkWidget *widget; ++ GtkEntry *entry; ++ GtkEntryPrivate *priv; ++ PangoContext *context; ++ PangoFontMetrics *metrics; ++ ++ widget = gtk_css_gadget_get_owner (gadget); ++ entry = GTK_ENTRY (widget); ++ priv = entry->priv; ++ ++ context = gtk_widget_get_pango_context (widget); ++ metrics = pango_context_get_metrics (context, ++ pango_context_get_font_description (context), ++ pango_context_get_language (context)); ++ ++ if (orientation == GTK_ORIENTATION_HORIZONTAL) ++ { ++ gint icon_width, i; ++ gint min, nat; ++ gint char_width; ++ gint digit_width; ++ gint char_pixels; ++ ++ char_width = pango_font_metrics_get_approximate_char_width (metrics); ++ digit_width = pango_font_metrics_get_approximate_digit_width (metrics); ++ char_pixels = (MAX (char_width, digit_width) + PANGO_SCALE - 1) / PANGO_SCALE; ++ ++ if (priv->width_chars < 0) ++ { ++ if (GTK_IS_SPIN_BUTTON (entry)) ++ min = gtk_spin_button_get_text_width (GTK_SPIN_BUTTON (entry)); ++ else ++ min = MIN_ENTRY_WIDTH; ++ } ++ else ++ { ++ min = char_pixels * priv->width_chars; ++ } ++ ++ if (priv->max_width_chars < 0) ++ nat = min; ++ else ++ nat = char_pixels * priv->max_width_chars; ++ ++ icon_width = 0; ++ for (i = 0; i < MAX_ICONS; i++) ++ icon_width += get_icon_width (entry, i); ++ ++ min = MAX (min, icon_width); ++ nat = MAX (min, nat); ++ ++ *minimum = min; ++ *natural = nat; ++ } ++ else ++ { ++ gint height, baseline; ++ gint icon_height, i; ++ PangoLayout *layout; ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ ++ priv->ascent = pango_font_metrics_get_ascent (metrics); ++ priv->descent = pango_font_metrics_get_descent (metrics); ++ ++ pango_layout_get_pixel_size (layout, NULL, &height); ++ ++ height = MAX (height, PANGO_PIXELS (priv->ascent + priv->descent)); ++ ++ baseline = pango_layout_get_baseline (layout) / PANGO_SCALE; ++ ++ icon_height = 0; ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ gint h; ++ ++ if (!icon_info) ++ continue; ++ ++ gtk_css_gadget_get_preferred_size (icon_info->gadget, ++ GTK_ORIENTATION_VERTICAL, ++ -1, ++ NULL, &h, ++ NULL, NULL); ++ icon_height = MAX (icon_height, h); ++ } ++ ++ *minimum = MAX (height, icon_height); ++ *natural = MAX (height, icon_height); ++ ++ if (icon_height > height) ++ baseline += (icon_height - height) / 2; ++ ++ if (minimum_baseline) ++ *minimum_baseline = baseline; ++ if (natural_baseline) ++ *natural_baseline = baseline; ++ } ++ ++ pango_font_metrics_unref (metrics); ++ ++ if (priv->progress_gadget && gtk_css_gadget_get_visible (priv->progress_gadget)) ++ { ++ int prog_min, prog_nat; ++ ++ gtk_css_gadget_get_preferred_size (priv->progress_gadget, ++ orientation, ++ for_size, ++ &prog_min, &prog_nat, ++ NULL, NULL); ++ ++ *minimum = MAX (*minimum, prog_min); ++ *natural = MAX (*natural, prog_nat); ++ } ++} ++ ++static void ++place_windows (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info; ++ ++ icon_info = priv->icons[GTK_ENTRY_ICON_PRIMARY]; ++ if (icon_info) ++ { ++ GtkAllocation primary; ++ ++ gtk_css_gadget_get_border_allocation (icon_info->gadget, &primary, NULL); ++ gdk_window_move_resize (icon_info->window, ++ primary.x, primary.y, ++ primary.width, primary.height); ++ } ++ ++ icon_info = priv->icons[GTK_ENTRY_ICON_SECONDARY]; ++ if (icon_info) ++ { ++ GtkAllocation secondary; ++ ++ gtk_css_gadget_get_border_allocation (icon_info->gadget, &secondary, NULL); ++ gdk_window_move_resize (icon_info->window, ++ secondary.x, secondary.y, ++ secondary.width, secondary.height); ++ } ++ ++ gdk_window_move_resize (priv->text_area, ++ priv->text_allocation.x, priv->text_allocation.y, ++ priv->text_allocation.width, priv->text_allocation.height); ++} ++ ++static void ++gtk_entry_get_text_area_size (GtkEntry *entry, ++ gint *x, ++ gint *y, ++ gint *width, ++ gint *height) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkAllocation allocation, widget_allocation; ++ int baseline; ++ ++ gtk_css_gadget_get_content_allocation (priv->gadget, &allocation, &baseline); ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &widget_allocation); ++ ++ if (x) ++ *x = allocation.x - widget_allocation.x; ++ ++ if (y) ++ *y = allocation.y - widget_allocation.y; ++ ++ if (width) ++ *width = allocation.width; ++ ++ if (height) ++ *height = allocation.height; ++ ++ priv->text_baseline = baseline; ++} ++ ++static void ++gtk_entry_get_frame_size (GtkEntry *entry, ++ gint *x, ++ gint *y, ++ gint *width, ++ gint *height) ++{ ++ GtkAllocation allocation; ++ ++ gtk_css_gadget_get_content_allocation (entry->priv->gadget, &allocation, NULL); ++ ++ if (x) ++ *x = allocation.x; ++ ++ if (y) ++ *y = allocation.y; ++ ++ if (width) ++ *width = allocation.width; ++ ++ if (height) ++ *height = allocation.height; ++} ++ ++static G_GNUC_UNUSED void ++get_frame_size (GtkEntry *entry, ++ gboolean relative_to_window, ++ gint *x, ++ gint *y, ++ gint *width, ++ gint *height) ++{ ++ GtkEntryClass *class = GTK_ENTRY_GET_CLASS (entry); ++ ++ g_assert (class->get_frame_size != NULL); ++ class->get_frame_size (entry, x, y, width, height); ++ ++ if (!relative_to_window) ++ { ++ GtkAllocation allocation; ++ ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ ++ if (x) ++ *x -= allocation.x; ++ if (y) ++ *y -= allocation.y; ++ } ++} ++ ++static void ++gtk_entry_size_allocate (GtkWidget *widget, ++ GtkAllocation *allocation) ++{ ++ GdkRectangle clip; ++ ++ gtk_widget_set_allocation (widget, allocation); ++ ++ gtk_css_gadget_allocate (GTK_ENTRY (widget)->priv->gadget, ++ allocation, ++ gtk_widget_get_allocated_baseline (widget), ++ &clip); ++ ++ gtk_widget_set_clip (widget, &clip); ++} ++ ++static void ++gtk_entry_allocate (GtkCssGadget *gadget, ++ const GtkAllocation *allocation, ++ int baseline, ++ GtkAllocation *out_clip, ++ gpointer data) ++{ ++ GtkEntry *entry; ++ GtkWidget *widget; ++ GtkEntryPrivate *priv; ++ GtkAllocation widget_allocation; ++ gint i; ++ ++ widget = gtk_css_gadget_get_owner (gadget); ++ entry = GTK_ENTRY (widget); ++ priv = entry->priv; ++ ++ priv->text_baseline = -1; ++ GTK_ENTRY_GET_CLASS (entry)->get_text_area_size (entry, ++ &priv->text_allocation.x, ++ &priv->text_allocation.y, ++ &priv->text_allocation.width, ++ &priv->text_allocation.height); ++ gtk_widget_get_allocation (widget, &widget_allocation); ++ priv->text_allocation.x += widget_allocation.x; ++ priv->text_allocation.y += widget_allocation.y; ++ ++ out_clip->x = 0; ++ out_clip->y = 0; ++ out_clip->width = 0; ++ out_clip->height = 0; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ GtkAllocation icon_alloc; ++ GdkRectangle clip; ++ gint dummy, width, height; ++ ++ if (!icon_info) ++ continue; ++ ++ gtk_css_gadget_get_preferred_size (icon_info->gadget, ++ GTK_ORIENTATION_HORIZONTAL, ++ -1, ++ &dummy, &width, ++ NULL, NULL); ++ gtk_css_gadget_get_preferred_size (icon_info->gadget, ++ GTK_ORIENTATION_VERTICAL, ++ -1, ++ &dummy, &height, ++ NULL, NULL); ++ ++ if ((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL && i == GTK_ENTRY_ICON_PRIMARY) || ++ (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR && i == GTK_ENTRY_ICON_SECONDARY)) ++ { ++ icon_alloc.x = priv->text_allocation.x + priv->text_allocation.width - width; ++ } ++ else ++ { ++ icon_alloc.x = priv->text_allocation.x; ++ priv->text_allocation.x += width; ++ } ++ icon_alloc.y = priv->text_allocation.y + (priv->text_allocation.height - height) / 2; ++ icon_alloc.width = width; ++ icon_alloc.height = height; ++ priv->text_allocation.width -= width; ++ ++ gtk_css_gadget_allocate (icon_info->gadget, ++ &icon_alloc, ++ baseline, ++ &clip); ++ ++ gdk_rectangle_union (out_clip, &clip, out_clip); ++ } ++ ++ if (priv->progress_gadget && gtk_css_gadget_get_visible (priv->progress_gadget)) ++ { ++ int extra_width, req_width; ++ GtkAllocation progress_alloc; ++ GdkRectangle clip; ++ ++ gtk_css_gadget_get_preferred_size (priv->progress_gadget, ++ GTK_ORIENTATION_HORIZONTAL, ++ allocation->height, ++ &req_width, NULL, ++ NULL, NULL); ++ extra_width = allocation->width - req_width; ++ ++ progress_alloc = *allocation; ++ ++ if (priv->progress_pulse_mode) ++ { ++ gdouble value = priv->progress_pulse_current; ++ ++ progress_alloc.x += (gint) floor (value * extra_width); ++ progress_alloc.width = req_width + (gint) ceil (priv->progress_pulse_fraction * extra_width); ++ } ++ else ++ { ++ gdouble value = priv->progress_fraction; ++ ++ progress_alloc.width = req_width + (gint) nearbyint (value * extra_width); ++ if (gtk_widget_get_direction (GTK_WIDGET (entry)) == GTK_TEXT_DIR_RTL) ++ progress_alloc.x += allocation->width - progress_alloc.width; ++ } ++ ++ gtk_css_gadget_allocate (priv->progress_gadget, &progress_alloc, baseline, &clip); ++ ++ gdk_rectangle_union (out_clip, &clip, out_clip); ++ } ++ ++ /* Do this here instead of gtk_entry_size_allocate() so it works ++ * inside spinbuttons, which don't chain up. ++ */ ++ if (gtk_widget_get_realized (widget)) ++ { ++ GtkEntryCompletion *completion; ++ ++ place_windows (entry); ++ gtk_entry_recompute (entry); ++ ++ completion = gtk_entry_get_completion (entry); ++ if (completion) ++ _gtk_entry_completion_resize_popup (completion); ++ } ++} ++ ++static gboolean ++should_prelight (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return FALSE; ++ ++ if (icon_info->nonactivatable && icon_info->target_list == NULL) ++ return FALSE; ++ ++ if (icon_info->pressed) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++static gboolean ++gtk_entry_draw (GtkWidget *widget, ++ cairo_t *cr) ++{ ++ gtk_css_gadget_draw (GTK_ENTRY (widget)->priv->gadget, cr); ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++#define UNDERSHOOT_SIZE 20 ++ ++static void ++gtk_entry_draw_undershoot (GtkEntry *entry, ++ cairo_t *cr) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkStyleContext *context; ++ gint min_offset, max_offset; ++ GtkAllocation allocation; ++ GdkRectangle rect; ++ gboolean rtl; ++ ++ context = gtk_widget_get_style_context (GTK_WIDGET (entry)); ++ rtl = gtk_widget_get_direction (GTK_WIDGET (entry)) == GTK_TEXT_DIR_RTL; ++ ++ gtk_entry_get_scroll_limits (entry, &min_offset, &max_offset); ++ ++ gtk_css_gadget_get_content_allocation (priv->gadget, &rect, NULL); ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ rect.x -= allocation.x; ++ rect.y -= allocation.y; ++ ++ if (priv->scroll_offset > min_offset) ++ { ++ int icon_width = 0; ++ int icon_idx = rtl ? 1 : 0; ++ if (priv->icons[icon_idx] != NULL) ++ { ++ gtk_css_gadget_get_preferred_size (priv->icons[icon_idx]->gadget, ++ GTK_ORIENTATION_HORIZONTAL, ++ -1, ++ &icon_width, NULL, ++ NULL, NULL); ++ } ++ ++ gtk_style_context_save_to_node (context, priv->undershoot_node[0]); ++ gtk_render_background (context, cr, rect.x + icon_width - 1, rect.y, UNDERSHOOT_SIZE, rect.height); ++ gtk_render_frame (context, cr, rect.x + icon_width - 1, rect.y, UNDERSHOOT_SIZE, rect.height); ++ gtk_style_context_restore (context); ++ } ++ ++ if (priv->scroll_offset < max_offset) ++ { ++ int icon_width = 0; ++ int icon_idx = rtl ? 0 : 1; ++ if (priv->icons[icon_idx] != NULL) ++ { ++ gtk_css_gadget_get_preferred_size (priv->icons[icon_idx]->gadget, ++ GTK_ORIENTATION_HORIZONTAL, ++ -1, ++ &icon_width, NULL, ++ NULL, NULL); ++ } ++ gtk_style_context_save_to_node (context, priv->undershoot_node[1]); ++ gtk_render_background (context, cr, rect.x + rect.width - UNDERSHOOT_SIZE - icon_width + 1, rect.y, UNDERSHOOT_SIZE, rect.height); ++ gtk_render_frame (context, cr, rect.x + rect.width - UNDERSHOOT_SIZE - icon_width + 1, rect.y, UNDERSHOOT_SIZE, rect.height); ++ gtk_style_context_restore (context); ++ } ++} ++ ++static gboolean ++gtk_entry_render (GtkCssGadget *gadget, ++ cairo_t *cr, ++ int x, ++ int y, ++ int width, ++ int height, ++ gpointer data) ++{ ++ GtkWidget *widget; ++ GtkEntry *entry; ++ GtkEntryPrivate *priv; ++ int i; ++ ++ widget = gtk_css_gadget_get_owner (gadget); ++ entry = GTK_ENTRY (widget); ++ priv = entry->priv; ++ ++ /* Draw progress */ ++ if (priv->progress_gadget && gtk_css_gadget_get_visible (priv->progress_gadget)) ++ gtk_css_gadget_draw (priv->progress_gadget, cr); ++ ++ /* Draw text and cursor */ ++ cairo_save (cr); ++ ++ if (priv->dnd_position != -1) ++ gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_DND); ++ ++ gtk_entry_draw_text (GTK_ENTRY (widget), cr); ++ ++ /* When no text is being displayed at all, don't show the cursor */ ++ if (gtk_entry_get_display_mode (entry) != DISPLAY_BLANK && ++ gtk_widget_has_focus (widget) && ++ priv->selection_bound == priv->current_pos && priv->cursor_visible) ++ gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_STANDARD); ++ ++ cairo_restore (cr); ++ ++ /* Draw icons */ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL) ++ gtk_css_gadget_draw (icon_info->gadget, cr); ++ } ++ ++ gtk_entry_draw_undershoot (entry, cr); ++ ++ return FALSE; ++} ++ ++static gint ++gtk_entry_enter_notify (GtkWidget *widget, ++ GdkEventCrossing *event) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gint i; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL && event->window == icon_info->window) ++ { ++ if (should_prelight (entry, i)) ++ { ++ icon_info->prelight = TRUE; ++ update_icon_state (widget, i); ++ gtk_widget_queue_draw (widget); ++ } ++ ++ break; ++ } ++ } ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++static gint ++gtk_entry_leave_notify (GtkWidget *widget, ++ GdkEventCrossing *event) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gint i; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL && event->window == icon_info->window) ++ { ++ /* a grab means that we may never see the button release */ ++ if (event->mode == GDK_CROSSING_GRAB || event->mode == GDK_CROSSING_GTK_GRAB) ++ icon_info->pressed = FALSE; ++ ++ if (should_prelight (entry, i)) ++ { ++ icon_info->prelight = FALSE; ++ update_icon_state (widget, i); ++ gtk_widget_queue_draw (widget); ++ } ++ ++ break; ++ } ++ } ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++static void ++gtk_entry_get_pixel_ranges (GtkEntry *entry, ++ gint **ranges, ++ gint *n_ranges) ++{ ++ gint start_char, end_char; ++ ++ if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_char, &end_char)) ++ { ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE); ++ PangoLayoutLine *line = pango_layout_get_lines_readonly (layout)->data; ++ const char *text = pango_layout_get_text (layout); ++ gint start_index = g_utf8_offset_to_pointer (text, start_char) - text; ++ gint end_index = g_utf8_offset_to_pointer (text, end_char) - text; ++ gint real_n_ranges, i; ++ ++ pango_layout_line_get_x_ranges (line, start_index, end_index, ranges, &real_n_ranges); ++ ++ if (ranges) ++ { ++ gint *r = *ranges; ++ ++ for (i = 0; i < real_n_ranges; ++i) ++ { ++ r[2 * i + 1] = (r[2 * i + 1] - r[2 * i]) / PANGO_SCALE; ++ r[2 * i] = r[2 * i] / PANGO_SCALE; ++ } ++ } ++ ++ if (n_ranges) ++ *n_ranges = real_n_ranges; ++ } ++ else ++ { ++ if (n_ranges) ++ *n_ranges = 0; ++ if (ranges) ++ *ranges = NULL; ++ } ++} ++ ++static gboolean ++in_selection (GtkEntry *entry, ++ gint x) ++{ ++ gint *ranges; ++ gint n_ranges, i; ++ gint retval = FALSE; ++ ++ gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges); ++ ++ for (i = 0; i < n_ranges; ++i) ++ { ++ if (x >= ranges[2 * i] && x < ranges[2 * i] + ranges[2 * i + 1]) ++ { ++ retval = TRUE; ++ break; ++ } ++ } ++ ++ g_free (ranges); ++ return retval; ++} ++ ++static void ++gtk_entry_move_handle (GtkEntry *entry, ++ GtkTextHandlePosition pos, ++ gint x, ++ gint y, ++ gint height) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (!_gtk_text_handle_get_is_dragged (priv->text_handle, pos) && ++ (x < 0 || x > priv->text_allocation.width)) ++ { ++ /* Hide the handle if it's not being manipulated ++ * and fell outside of the visible text area. ++ */ ++ _gtk_text_handle_set_visible (priv->text_handle, pos, FALSE); ++ } ++ else ++ { ++ GtkAllocation allocation; ++ GdkRectangle rect; ++ ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ rect.x = x + priv->text_allocation.x - allocation.x; ++ rect.y = y + priv->text_allocation.y - allocation.y; ++ rect.width = 1; ++ rect.height = height; ++ ++ _gtk_text_handle_set_visible (priv->text_handle, pos, TRUE); ++ _gtk_text_handle_set_position (priv->text_handle, pos, &rect); ++ _gtk_text_handle_set_direction (priv->text_handle, pos, priv->resolved_dir); ++ } ++} ++ ++static gint ++gtk_entry_get_selection_bound_location (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ PangoLayout *layout; ++ PangoRectangle pos; ++ gint x; ++ const gchar *text; ++ gint index; ++ ++ layout = gtk_entry_ensure_layout (entry, FALSE); ++ text = pango_layout_get_text (layout); ++ index = g_utf8_offset_to_pointer (text, priv->selection_bound) - text; ++ pango_layout_index_to_pos (layout, index, &pos); ++ ++ if (gtk_widget_get_direction (GTK_WIDGET (entry)) == GTK_TEXT_DIR_RTL) ++ x = (pos.x + pos.width) / PANGO_SCALE; ++ else ++ x = pos.x / PANGO_SCALE; ++ ++ return x; ++} ++ ++static void ++gtk_entry_update_handles (GtkEntry *entry, ++ GtkTextHandleMode mode) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gint strong_x, height; ++ gint cursor, bound; ++ ++ _gtk_text_handle_set_mode (priv->text_handle, mode); ++ ++ height = gdk_window_get_height (priv->text_area); ++ ++ gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &strong_x, NULL); ++ cursor = strong_x - priv->scroll_offset; ++ ++ if (mode == GTK_TEXT_HANDLE_MODE_SELECTION) ++ { ++ gint start, end; ++ ++ bound = gtk_entry_get_selection_bound_location (entry) - priv->scroll_offset; ++ ++ if (priv->selection_bound > priv->current_pos) ++ { ++ start = cursor; ++ end = bound; ++ } ++ else ++ { ++ start = bound; ++ end = cursor; ++ } ++ ++ /* Update start selection bound */ ++ gtk_entry_move_handle (entry, GTK_TEXT_HANDLE_POSITION_SELECTION_START, ++ start, 0, height); ++ gtk_entry_move_handle (entry, GTK_TEXT_HANDLE_POSITION_SELECTION_END, ++ end, 0, height); ++ } ++ else ++ gtk_entry_move_handle (entry, GTK_TEXT_HANDLE_POSITION_CURSOR, ++ cursor, 0, height); ++} ++ ++static gboolean ++gtk_entry_event (GtkWidget *widget, ++ GdkEvent *event) ++{ ++ GtkEntryPrivate *priv = GTK_ENTRY (widget)->priv; ++ EntryIconInfo *icon_info = NULL; ++ GdkEventSequence *sequence; ++ GdkDevice *device; ++ gdouble x, y; ++ gint i; ++ ++ if (event->type == GDK_MOTION_NOTIFY && ++ priv->mouse_cursor_obscured && ++ event->any.window == priv->text_area) ++ { ++ GdkCursor *cursor; ++ ++ cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text"); ++ gdk_window_set_cursor (priv->text_area, cursor); ++ g_object_unref (cursor); ++ priv->mouse_cursor_obscured = FALSE; ++ return GDK_EVENT_PROPAGATE; ++ } ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if (priv->icons[i] && ++ event->any.window != NULL && ++ priv->icons[i]->window == event->any.window) ++ { ++ icon_info = priv->icons[i]; ++ break; ++ } ++ } ++ ++ if (!icon_info) ++ return GDK_EVENT_PROPAGATE; ++ ++ if (icon_info->insensitive) ++ return GDK_EVENT_STOP; ++ ++ sequence = gdk_event_get_event_sequence (event); ++ device = gdk_event_get_device (event); ++ gdk_event_get_coords (event, &x, &y); ++ ++ switch (event->type) ++ { ++ case GDK_TOUCH_BEGIN: ++ if (icon_info->current_sequence) ++ break; ++ ++ icon_info->current_sequence = sequence; ++ /* Fall through */ ++ case GDK_BUTTON_PRESS: ++ case GDK_2BUTTON_PRESS: ++ case GDK_3BUTTON_PRESS: ++ if (should_prelight (GTK_ENTRY (widget), i)) ++ { ++ icon_info->prelight = FALSE; ++ update_icon_state (widget, i); ++ gtk_widget_queue_draw (widget); ++ } ++ ++ priv->start_x = x; ++ priv->start_y = y; ++ icon_info->pressed = TRUE; ++ icon_info->device = device; ++ ++ if (!icon_info->nonactivatable) ++ g_signal_emit (widget, signals[ICON_PRESS], 0, i, event); ++ ++ break; ++ case GDK_TOUCH_UPDATE: ++ if (icon_info->device != device || ++ icon_info->current_sequence != sequence) ++ break; ++ /* Fall through */ ++ case GDK_MOTION_NOTIFY: ++ if (icon_info->pressed && ++ icon_info->target_list != NULL && ++ gtk_drag_check_threshold (widget, ++ priv->start_x, ++ priv->start_y, ++ x, y)) ++ { ++ icon_info->in_drag = TRUE; ++ gtk_drag_begin_with_coordinates (widget, ++ icon_info->target_list, ++ icon_info->actions, ++ 1, ++ event, ++ priv->start_x, ++ priv->start_y); ++ } ++ ++ break; ++ case GDK_TOUCH_END: ++ if (icon_info->device != device || ++ icon_info->current_sequence != sequence) ++ break; ++ ++ icon_info->current_sequence = NULL; ++ /* Fall through */ ++ case GDK_BUTTON_RELEASE: ++ icon_info->pressed = FALSE; ++ icon_info->device = NULL; ++ ++ if (should_prelight (GTK_ENTRY (widget), i) && ++ x >= 0 && y >= 0 && ++ x < gdk_window_get_width (icon_info->window) && ++ y < gdk_window_get_height (icon_info->window)) ++ { ++ icon_info->prelight = TRUE; ++ update_icon_state (widget, i); ++ gtk_widget_queue_draw (widget); ++ } ++ ++ if (!icon_info->nonactivatable) ++ g_signal_emit (widget, signals[ICON_RELEASE], 0, i, event); ++ ++ break; ++ default: ++ return GDK_EVENT_PROPAGATE; ++ } ++ ++ return GDK_EVENT_STOP; ++} ++ ++static void ++gesture_get_current_point_in_layout (GtkGestureSingle *gesture, ++ GtkEntry *entry, ++ gint *x, ++ gint *y) ++{ ++ gint tx, ty; ++ GdkEventSequence *sequence; ++ gdouble px, py; ++ ++ sequence = gtk_gesture_single_get_current_sequence (gesture); ++ gtk_gesture_get_point (GTK_GESTURE (gesture), sequence, &px, &py); ++ gtk_entry_get_layout_offsets (entry, &tx, &ty); ++ ++ if (x) ++ *x = px - tx; ++ if (y) ++ *y = py - ty; ++} ++ ++static void ++gtk_entry_multipress_gesture_pressed (GtkGestureMultiPress *gesture, ++ gint n_press, ++ gdouble widget_x, ++ gdouble widget_y, ++ GtkEntry *entry) ++{ ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ GtkWidget *widget = GTK_WIDGET (entry); ++ GtkEntryPrivate *priv = entry->priv; ++ GdkEventSequence *current; ++ const GdkEvent *event; ++ gint x, y, sel_start, sel_end; ++ guint button; ++ gint tmp_pos; ++ ++ button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)); ++ current = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture)); ++ event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), current); ++ ++ gtk_gesture_set_sequence_state (GTK_GESTURE (gesture), current, ++ GTK_EVENT_SEQUENCE_CLAIMED); ++ gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), entry, &x, &y); ++ gtk_entry_reset_blink_time (entry); ++ ++ if (!gtk_widget_has_focus (widget)) ++ { ++ priv->in_click = TRUE; ++ gtk_widget_grab_focus (widget); ++ priv->in_click = FALSE; ++ } ++ ++ tmp_pos = gtk_entry_find_position (entry, x); ++ ++ if (gdk_event_triggers_context_menu (event)) ++ { ++ gtk_entry_do_popup (entry, event); ++ } ++ else if (n_press == 1 && button == GDK_BUTTON_MIDDLE && ++ get_middle_click_paste (entry)) ++ { ++ if (priv->editable) ++ { ++ priv->insert_pos = tmp_pos; ++ gtk_entry_paste (entry, GDK_SELECTION_PRIMARY); ++ } ++ else ++ { ++ gtk_widget_error_bell (widget); ++ } ++ } ++ else if (button == GDK_BUTTON_PRIMARY) ++ { ++ gboolean have_selection = gtk_editable_get_selection_bounds (editable, &sel_start, &sel_end); ++ GtkTextHandleMode mode; ++ gboolean is_touchscreen, extend_selection; ++ GdkDevice *source; ++ ++ source = gdk_event_get_source_device (event); ++ is_touchscreen = gtk_simulate_touchscreen () || ++ gdk_device_get_source (source) == GDK_SOURCE_TOUCHSCREEN; ++ ++ if (!is_touchscreen) ++ mode = GTK_TEXT_HANDLE_MODE_NONE; ++ else if (have_selection) ++ mode = GTK_TEXT_HANDLE_MODE_SELECTION; ++ else ++ mode = GTK_TEXT_HANDLE_MODE_CURSOR; ++ ++ if (is_touchscreen) ++ gtk_entry_ensure_text_handles (entry); ++ ++ priv->in_drag = FALSE; ++ priv->select_words = FALSE; ++ priv->select_lines = FALSE; ++ ++ extend_selection = ++ (event->button.state & ++ gtk_widget_get_modifier_mask (widget, ++ GDK_MODIFIER_INTENT_EXTEND_SELECTION)); ++ ++ if (extend_selection) ++ gtk_entry_reset_im_context (entry); ++ ++ switch (n_press) ++ { ++ case 1: ++ if (in_selection (entry, x)) ++ { ++ if (is_touchscreen) ++ { ++ if (entry->priv->selection_bubble && ++ gtk_widget_get_visible (entry->priv->selection_bubble)) ++ gtk_entry_selection_bubble_popup_unset (entry); ++ else ++ gtk_entry_selection_bubble_popup_set (entry); ++ } ++ else if (extend_selection) ++ { ++ /* Truncate current selection, but keep it as big as possible */ ++ if (tmp_pos - sel_start > sel_end - tmp_pos) ++ gtk_entry_set_positions (entry, sel_start, tmp_pos); ++ else ++ gtk_entry_set_positions (entry, tmp_pos, sel_end); ++ ++ /* all done, so skip the extend_to_left stuff later */ ++ extend_selection = FALSE; ++ } ++ else ++ { ++ /* We'll either start a drag, or clear the selection */ ++ priv->in_drag = TRUE; ++ priv->drag_start_x = x; ++ priv->drag_start_y = y; ++ } ++ } ++ else ++ { ++ gtk_entry_selection_bubble_popup_unset (entry); ++ ++ if (!extend_selection) ++ { ++ gtk_editable_set_position (editable, tmp_pos); ++ priv->handle_place_time = g_get_monotonic_time (); ++ } ++ else ++ { ++ /* select from the current position to the clicked position */ ++ if (!have_selection) ++ sel_start = sel_end = priv->current_pos; ++ ++ gtk_entry_set_positions (entry, tmp_pos, tmp_pos); ++ } ++ } ++ ++ break; ++ ++ case 2: ++ priv->select_words = TRUE; ++ gtk_entry_select_word (entry); ++ if (is_touchscreen) ++ mode = GTK_TEXT_HANDLE_MODE_SELECTION; ++ break; ++ ++ case 3: ++ priv->select_lines = TRUE; ++ gtk_entry_select_line (entry); ++ if (is_touchscreen) ++ mode = GTK_TEXT_HANDLE_MODE_SELECTION; ++ break; ++ ++ default: ++ break; ++ } ++ ++ if (extend_selection) ++ { ++ gboolean extend_to_left; ++ gint start, end; ++ ++ start = MIN (priv->current_pos, priv->selection_bound); ++ start = MIN (sel_start, start); ++ ++ end = MAX (priv->current_pos, priv->selection_bound); ++ end = MAX (sel_end, end); ++ ++ if (tmp_pos == sel_start || tmp_pos == sel_end) ++ extend_to_left = (tmp_pos == start); ++ else ++ extend_to_left = (end == sel_end); ++ ++ if (extend_to_left) ++ gtk_entry_set_positions (entry, start, end); ++ else ++ gtk_entry_set_positions (entry, end, start); ++ } ++ ++ gtk_gesture_set_state (priv->drag_gesture, ++ GTK_EVENT_SEQUENCE_CLAIMED); ++ ++ if (priv->text_handle) ++ gtk_entry_update_handles (entry, mode); ++ } ++ ++ if (n_press >= 3) ++ gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture)); ++} ++ ++static gchar * ++_gtk_entry_get_selected_text (GtkEntry *entry) ++{ ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint start_text, end_text; ++ gchar *text = NULL; ++ ++ if (gtk_editable_get_selection_bounds (editable, &start_text, &end_text)) ++ text = gtk_editable_get_chars (editable, start_text, end_text); ++ ++ return text; ++} ++ ++static void ++gtk_entry_show_magnifier (GtkEntry *entry, ++ gint x, ++ gint y) ++{ ++ GtkAllocation allocation; ++ cairo_rectangle_int_t rect; ++ GtkEntryPrivate *priv; ++ ++ gtk_entry_ensure_magnifier (entry); ++ ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ ++ priv = entry->priv; ++ rect.x = x + priv->text_allocation.x - allocation.x; ++ rect.width = 1; ++ rect.y = priv->text_allocation.y - allocation.y; ++ rect.height = priv->text_allocation.height; ++ ++ _gtk_magnifier_set_coords (GTK_MAGNIFIER (priv->magnifier), rect.x, ++ rect.y + rect.height / 2); ++ rect.x = CLAMP (rect.x, 0, allocation.width); ++ gtk_popover_set_pointing_to (GTK_POPOVER (priv->magnifier_popover), ++ &rect); ++ gtk_popover_popup (GTK_POPOVER (priv->magnifier_popover)); ++} ++ ++static void ++gtk_entry_drag_gesture_update (GtkGestureDrag *gesture, ++ gdouble offset_x, ++ gdouble offset_y, ++ GtkEntry *entry) ++{ ++ GtkWidget *widget = GTK_WIDGET (entry); ++ GtkEntryPrivate *priv = entry->priv; ++ GdkEventSequence *sequence; ++ const GdkEvent *event; ++ gint x, y; ++ ++ gtk_entry_selection_bubble_popup_unset (entry); ++ ++ gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), entry, &x, &y); ++ sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture)); ++ event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence); ++ ++ if (priv->mouse_cursor_obscured) ++ { ++ GdkCursor *cursor; ++ ++ cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text"); ++ gdk_window_set_cursor (priv->text_area, cursor); ++ g_object_unref (cursor); ++ priv->mouse_cursor_obscured = FALSE; ++ } ++ ++ if (priv->select_lines) ++ return; ++ ++ if (priv->in_drag) ++ { ++ if (gtk_entry_get_display_mode (entry) == DISPLAY_NORMAL && ++ gtk_drag_check_threshold (widget, ++ priv->drag_start_x, priv->drag_start_y, ++ x, y)) ++ { ++ gint *ranges; ++ gint n_ranges; ++ GtkTargetList *target_list = gtk_target_list_new (NULL, 0); ++ guint actions = priv->editable ? GDK_ACTION_COPY | GDK_ACTION_MOVE : GDK_ACTION_COPY; ++ guint button; ++ ++ gtk_target_list_add_text_targets (target_list, 0); ++ ++ gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges); ++ ++ button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)); ++ gtk_drag_begin_with_coordinates (widget, target_list, actions, ++ button, (GdkEvent*) event, ++ priv->drag_start_x + ranges[0], ++ priv->drag_start_y); ++ g_free (ranges); ++ ++ priv->in_drag = FALSE; ++ ++ gtk_target_list_unref (target_list); ++ } ++ } ++ else ++ { ++ GdkInputSource input_source; ++ GdkDevice *source; ++ guint length; ++ gint tmp_pos; ++ ++ length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ ++ if (y < 0) ++ tmp_pos = 0; ++ else if (y >= gdk_window_get_height (priv->text_area)) ++ tmp_pos = length; ++ else ++ tmp_pos = gtk_entry_find_position (entry, x); ++ ++ source = gdk_event_get_source_device (event); ++ input_source = gdk_device_get_source (source); ++ ++ if (priv->select_words) ++ { ++ gint min, max; ++ gint old_min, old_max; ++ gint pos, bound; ++ ++ min = gtk_entry_move_backward_word (entry, tmp_pos, TRUE); ++ max = gtk_entry_move_forward_word (entry, tmp_pos, TRUE); ++ ++ pos = priv->current_pos; ++ bound = priv->selection_bound; ++ ++ old_min = MIN (priv->current_pos, priv->selection_bound); ++ old_max = MAX (priv->current_pos, priv->selection_bound); ++ ++ if (min < old_min) ++ { ++ pos = min; ++ bound = old_max; ++ } ++ else if (old_max < max) ++ { ++ pos = max; ++ bound = old_min; ++ } ++ else if (pos == old_min) ++ { ++ if (priv->current_pos != min) ++ pos = max; ++ } ++ else ++ { ++ if (priv->current_pos != max) ++ pos = min; ++ } ++ ++ gtk_entry_set_positions (entry, pos, bound); ++ } ++ else ++ gtk_entry_set_positions (entry, tmp_pos, -1); ++ ++ /* Update touch handles' position */ ++ if (gtk_simulate_touchscreen () || ++ input_source == GDK_SOURCE_TOUCHSCREEN) ++ { ++ gtk_entry_ensure_text_handles (entry); ++ gtk_entry_update_handles (entry, ++ (priv->current_pos == priv->selection_bound) ? ++ GTK_TEXT_HANDLE_MODE_CURSOR : ++ GTK_TEXT_HANDLE_MODE_SELECTION); ++ gtk_entry_show_magnifier (entry, x - priv->scroll_offset, y); ++ } ++ } ++} ++ ++static void ++gtk_entry_drag_gesture_end (GtkGestureDrag *gesture, ++ gdouble offset_x, ++ gdouble offset_y, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gboolean in_drag, is_touchscreen; ++ GdkEventSequence *sequence; ++ const GdkEvent *event; ++ GdkDevice *source; ++ ++ sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture)); ++ in_drag = priv->in_drag; ++ priv->in_drag = FALSE; ++ ++ if (priv->magnifier_popover) ++ gtk_popover_popdown (GTK_POPOVER (priv->magnifier_popover)); ++ ++ /* Check whether the drag was cancelled rather than finished */ ++ if (!gtk_gesture_handles_sequence (GTK_GESTURE (gesture), sequence)) ++ return; ++ ++ event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence); ++ source = gdk_event_get_source_device (event); ++ is_touchscreen = gtk_simulate_touchscreen () || ++ gdk_device_get_source (source) == GDK_SOURCE_TOUCHSCREEN; ++ ++ if (in_drag) ++ { ++ gint tmp_pos = gtk_entry_find_position (entry, priv->drag_start_x); ++ ++ gtk_editable_set_position (GTK_EDITABLE (entry), tmp_pos); ++ } ++ ++ if (is_touchscreen && ++ !gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), NULL, NULL)) ++ gtk_entry_update_handles (entry, GTK_TEXT_HANDLE_MODE_CURSOR); ++ ++ gtk_entry_update_primary_selection (entry); ++} ++ ++static void ++set_invisible_cursor (GdkWindow *window) ++{ ++ GdkCursor *cursor; ++ ++ cursor = gdk_cursor_new_from_name (gdk_window_get_display (window), "none"); ++ gdk_window_set_cursor (window, cursor); ++ g_object_unref (cursor); ++} ++ ++static void ++gtk_entry_obscure_mouse_cursor (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->mouse_cursor_obscured) ++ return; ++ ++ if (priv->text_area) ++ { ++ set_invisible_cursor (priv->text_area); ++ priv->mouse_cursor_obscured = TRUE; ++ } ++} ++ ++static gint ++gtk_entry_key_press (GtkWidget *widget, ++ GdkEventKey *event) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gboolean retval = FALSE; ++ ++ priv->handling_key_event = TRUE; ++ ++ gtk_entry_reset_blink_time (entry); ++ gtk_entry_pend_cursor_blink (entry); ++ ++ gtk_entry_selection_bubble_popup_unset (entry); ++ ++ if (!event->send_event && priv->text_handle) ++ _gtk_text_handle_set_mode (priv->text_handle, ++ GTK_TEXT_HANDLE_MODE_NONE); ++ ++ if (priv->editable) ++ { ++ if (gtk_im_context_filter_keypress (priv->im_context, event)) ++ { ++ priv->need_im_reset = TRUE; ++ retval = TRUE; ++ goto out; ++ } ++ } ++ ++ if (event->keyval == GDK_KEY_Return || ++ event->keyval == GDK_KEY_KP_Enter || ++ event->keyval == GDK_KEY_ISO_Enter || ++ event->keyval == GDK_KEY_Escape) ++ gtk_entry_reset_im_context (entry); ++ ++ if (GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_press_event (widget, event)) ++ { ++ /* Activate key bindings */ ++ retval = TRUE; ++ goto out; ++ } ++ ++ if (!priv->editable && event->length) ++ gtk_widget_error_bell (widget); ++ ++out: ++ priv->handling_key_event = FALSE; ++ ++ return retval; ++} ++ ++static gint ++gtk_entry_key_release (GtkWidget *widget, ++ GdkEventKey *event) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gboolean retval = FALSE; ++ ++ priv->handling_key_event = TRUE; ++ ++ if (priv->editable) ++ { ++ if (gtk_im_context_filter_keypress (priv->im_context, event)) ++ { ++ priv->need_im_reset = TRUE; ++ retval = TRUE; ++ goto out; ++ } ++ } ++ ++ retval = GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_release_event (widget, event); ++ ++out: ++ priv->handling_key_event = FALSE; ++ return retval; ++} ++ ++static gint ++gtk_entry_focus_in (GtkWidget *widget, ++ GdkEventFocus *event) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GdkKeymap *keymap; ++ ++ gtk_widget_queue_draw (widget); ++ ++ keymap = gdk_keymap_get_for_display (gtk_widget_get_display (widget)); ++ ++ if (priv->editable) ++ { ++ priv->need_im_reset = TRUE; ++ gtk_im_context_focus_in (priv->im_context); ++ keymap_state_changed (keymap, entry); ++ g_signal_connect (keymap, "state-changed", ++ G_CALLBACK (keymap_state_changed), entry); ++ } ++ ++ g_signal_connect (keymap, "direction-changed", ++ G_CALLBACK (keymap_direction_changed), entry); ++ ++ if (gtk_entry_buffer_get_bytes (get_buffer (entry)) == 0 && ++ priv->placeholder_text != NULL) ++ { ++ gtk_entry_recompute (entry); ++ } ++ else ++ { ++ gtk_entry_reset_blink_time (entry); ++ gtk_entry_check_cursor_blink (entry); ++ } ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++static gint ++gtk_entry_focus_out (GtkWidget *widget, ++ GdkEventFocus *event) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEntryCompletion *completion; ++ GdkKeymap *keymap; ++ ++ gtk_entry_selection_bubble_popup_unset (entry); ++ ++ if (priv->text_handle) ++ _gtk_text_handle_set_mode (priv->text_handle, ++ GTK_TEXT_HANDLE_MODE_NONE); ++ ++ gtk_widget_queue_draw (widget); ++ ++ keymap = gdk_keymap_get_for_display (gtk_widget_get_display (widget)); ++ ++ if (priv->editable) ++ { ++ priv->need_im_reset = TRUE; ++ gtk_im_context_focus_out (priv->im_context); ++ remove_capslock_feedback (entry); ++ } ++ ++ if (gtk_entry_buffer_get_bytes (get_buffer (entry)) == 0 && ++ priv->placeholder_text != NULL) ++ { ++ gtk_entry_recompute (entry); ++ } ++ else ++ { ++ gtk_entry_check_cursor_blink (entry); ++ } ++ ++ g_signal_handlers_disconnect_by_func (keymap, keymap_state_changed, entry); ++ g_signal_handlers_disconnect_by_func (keymap, keymap_direction_changed, entry); ++ ++ completion = gtk_entry_get_completion (entry); ++ if (completion) ++ _gtk_entry_completion_popdown (completion); ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++void ++_gtk_entry_grab_focus (GtkEntry *entry, ++ gboolean select_all) ++{ ++ if (!gtk_widget_get_can_focus (GTK_WIDGET (entry))) ++ return; ++ ++ if (!gtk_widget_is_sensitive (GTK_WIDGET (entry))) ++ return; ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->grab_focus (GTK_WIDGET (entry)); ++ ++ if (select_all) ++ gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); ++} ++ ++static void ++gtk_entry_grab_focus (GtkWidget *widget) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gboolean select_on_focus; ++ ++ if (priv->editable && !priv->in_click) ++ { ++ g_object_get (gtk_widget_get_settings (widget), ++ "gtk-entry-select-on-focus", ++ &select_on_focus, ++ NULL); ++ ++ _gtk_entry_grab_focus (entry, select_on_focus); ++ } ++ else ++ { ++ _gtk_entry_grab_focus (entry, FALSE); ++ } ++} ++ ++/** ++ * gtk_entry_grab_focus_without_selecting: ++ * @entry: a #GtkEntry ++ * ++ * Causes @entry to have keyboard focus. ++ * ++ * It behaves like gtk_widget_grab_focus(), ++ * except that it doesn't select the contents of the entry. ++ * You only want to call this on some special entries ++ * which the user usually doesn't want to replace all text in, ++ * such as search-as-you-type entries. ++ * ++ * Since: 3.16 ++ */ ++void ++gtk_entry_grab_focus_without_selecting (GtkEntry *entry) ++{ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ _gtk_entry_grab_focus (entry, FALSE); ++} ++ ++static void ++gtk_entry_direction_changed (GtkWidget *widget, ++ GtkTextDirection previous_dir) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ ++ gtk_entry_recompute (entry); ++ ++ update_icon_style (widget, GTK_ENTRY_ICON_PRIMARY); ++ update_icon_style (widget, GTK_ENTRY_ICON_SECONDARY); ++ ++ update_node_ordering (entry); ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->direction_changed (widget, previous_dir); ++} ++ ++static void ++gtk_entry_state_flags_changed (GtkWidget *widget, ++ GtkStateFlags previous_state) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GdkCursor *cursor; ++ ++ if (gtk_widget_get_realized (widget)) ++ { ++ if (gtk_widget_is_sensitive (widget)) ++ cursor = gdk_cursor_new_from_name (gtk_widget_get_display (widget), "text"); ++ else ++ cursor = NULL; ++ ++ gdk_window_set_cursor (priv->text_area, cursor); ++ ++ if (cursor) ++ g_object_unref (cursor); ++ ++ priv->mouse_cursor_obscured = FALSE; ++ ++ update_cursors (widget); ++ } ++ ++ if (!gtk_widget_is_sensitive (widget)) ++ { ++ /* Clear any selection */ ++ gtk_editable_select_region (GTK_EDITABLE (entry), priv->current_pos, priv->current_pos); ++ } ++ ++ update_node_state (entry); ++ update_icon_state (widget, GTK_ENTRY_ICON_PRIMARY); ++ update_icon_state (widget, GTK_ENTRY_ICON_SECONDARY); ++ ++ gtk_entry_update_cached_style_values (entry); ++} ++ ++static void ++gtk_entry_screen_changed (GtkWidget *widget, ++ GdkScreen *old_screen) ++{ ++ gtk_entry_recompute (GTK_ENTRY (widget)); ++} ++ ++/* GtkEditable method implementations ++ */ ++static void ++gtk_entry_insert_text (GtkEditable *editable, ++ const gchar *new_text, ++ gint new_text_length, ++ gint *position) ++{ ++ g_object_ref (editable); ++ ++ /* ++ * The incoming text may a password or other secret. We make sure ++ * not to copy it into temporary buffers. ++ */ ++ ++ g_signal_emit_by_name (editable, "insert-text", new_text, new_text_length, position); ++ ++ g_object_unref (editable); ++} ++ ++static void ++gtk_entry_delete_text (GtkEditable *editable, ++ gint start_pos, ++ gint end_pos) ++{ ++ g_object_ref (editable); ++ ++ g_signal_emit_by_name (editable, "delete-text", start_pos, end_pos); ++ ++ g_object_unref (editable); ++} ++ ++static gchar * ++gtk_entry_get_chars (GtkEditable *editable, ++ gint start_pos, ++ gint end_pos) ++{ ++ GtkEntry *entry = GTK_ENTRY (editable); ++ const gchar *text; ++ gint text_length; ++ gint start_index, end_index; ++ ++ text = gtk_entry_buffer_get_text (get_buffer (entry)); ++ text_length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ ++ if (end_pos < 0) ++ end_pos = text_length; ++ ++ start_pos = MIN (text_length, start_pos); ++ end_pos = MIN (text_length, end_pos); ++ ++ start_index = g_utf8_offset_to_pointer (text, start_pos) - text; ++ end_index = g_utf8_offset_to_pointer (text, end_pos) - text; ++ ++ return g_strndup (text + start_index, end_index - start_index); ++} ++ ++static void ++gtk_entry_real_set_position (GtkEditable *editable, ++ gint position) ++{ ++ GtkEntry *entry = GTK_ENTRY (editable); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ guint length; ++ ++ length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ if (position < 0 || position > length) ++ position = length; ++ ++ if (position != priv->current_pos || ++ position != priv->selection_bound) ++ { ++ gtk_entry_reset_im_context (entry); ++ gtk_entry_set_positions (entry, position, position); ++ } ++} ++ ++static gint ++gtk_entry_get_position (GtkEditable *editable) ++{ ++ GtkEntry *entry = GTK_ENTRY (editable); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ return priv->current_pos; ++} ++ ++static void ++gtk_entry_set_selection_bounds (GtkEditable *editable, ++ gint start, ++ gint end) ++{ ++ GtkEntry *entry = GTK_ENTRY (editable); ++ guint length; ++ ++ length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ if (start < 0) ++ start = length; ++ if (end < 0) ++ end = length; ++ ++ gtk_entry_reset_im_context (entry); ++ ++ gtk_entry_set_positions (entry, ++ MIN (end, length), ++ MIN (start, length)); ++ ++ gtk_entry_update_primary_selection (entry); ++} ++ ++static gboolean ++gtk_entry_get_selection_bounds (GtkEditable *editable, ++ gint *start, ++ gint *end) ++{ ++ GtkEntry *entry = GTK_ENTRY (editable); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ *start = priv->selection_bound; ++ *end = priv->current_pos; ++ ++ return (priv->selection_bound != priv->current_pos); ++} ++ ++static void ++gtk_entry_update_cached_style_values (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (!priv->invisible_char_set) ++ { ++ gunichar ch = find_invisible_char (GTK_WIDGET (entry)); ++ ++ if (priv->invisible_char != ch) ++ { ++ priv->invisible_char = ch; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INVISIBLE_CHAR]); ++ } ++ } ++} ++ ++static void ++gtk_entry_style_updated (GtkWidget *widget) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ ++ GTK_WIDGET_CLASS (gtk_entry_parent_class)->style_updated (widget); ++ ++ gtk_entry_update_cached_style_values (entry); ++} ++ ++/* GtkCellEditable method implementations ++ */ ++static void ++gtk_cell_editable_entry_activated (GtkEntry *entry, gpointer data) ++{ ++ gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (entry)); ++ gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (entry)); ++} ++ ++static gboolean ++gtk_cell_editable_key_press_event (GtkEntry *entry, ++ GdkEventKey *key_event, ++ gpointer data) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (key_event->keyval == GDK_KEY_Escape) ++ { ++ priv->editing_canceled = TRUE; ++ gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (entry)); ++ gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (entry)); ++ ++ return GDK_EVENT_STOP; ++ } ++ ++ /* override focus */ ++ if (key_event->keyval == GDK_KEY_Up || key_event->keyval == GDK_KEY_Down) ++ { ++ gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (entry)); ++ gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (entry)); ++ ++ return GDK_EVENT_STOP; ++ } ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++static void ++gtk_entry_start_editing (GtkCellEditable *cell_editable, ++ GdkEvent *event) ++{ ++ g_signal_connect (cell_editable, "activate", ++ G_CALLBACK (gtk_cell_editable_entry_activated), NULL); ++ g_signal_connect (cell_editable, "key-press-event", ++ G_CALLBACK (gtk_cell_editable_key_press_event), NULL); ++} ++ ++static void ++gtk_entry_password_hint_free (GtkEntryPasswordHint *password_hint) ++{ ++ if (password_hint->source_id) ++ g_source_remove (password_hint->source_id); ++ ++ g_slice_free (GtkEntryPasswordHint, password_hint); ++} ++ ++ ++static gboolean ++gtk_entry_remove_password_hint (gpointer data) ++{ ++ GtkEntryPasswordHint *password_hint = g_object_get_qdata (data, quark_password_hint); ++ password_hint->position = -1; ++ ++ /* Force the string to be redrawn, but now without a visible character */ ++ gtk_entry_recompute (GTK_ENTRY (data)); ++ return G_SOURCE_REMOVE; ++} ++ ++/* Default signal handlers ++ */ ++static void ++gtk_entry_real_insert_text (GtkEditable *editable, ++ const gchar *new_text, ++ gint new_text_length, ++ gint *position) ++{ ++ guint n_inserted; ++ gint n_chars; ++ ++ n_chars = g_utf8_strlen (new_text, new_text_length); ++ ++ /* ++ * The actual insertion into the buffer. This will end up firing the ++ * following signal handlers: buffer_inserted_text(), buffer_notify_display_text(), ++ * buffer_notify_text(), buffer_notify_length() ++ */ ++ begin_change (GTK_ENTRY (editable)); ++ ++ n_inserted = gtk_entry_buffer_insert_text (get_buffer (GTK_ENTRY (editable)), *position, new_text, n_chars); ++ ++ end_change (GTK_ENTRY (editable)); ++ ++ if (n_inserted != n_chars) ++ gtk_widget_error_bell (GTK_WIDGET (editable)); ++ ++ *position += n_inserted; ++} ++ ++static void ++gtk_entry_real_delete_text (GtkEditable *editable, ++ gint start_pos, ++ gint end_pos) ++{ ++ /* ++ * The actual deletion from the buffer. This will end up firing the ++ * following signal handlers: buffer_deleted_text(), buffer_notify_display_text(), ++ * buffer_notify_text(), buffer_notify_length() ++ */ ++ ++ begin_change (GTK_ENTRY (editable)); ++ ++ gtk_entry_buffer_delete_text (get_buffer (GTK_ENTRY (editable)), start_pos, end_pos - start_pos); ++ ++ end_change (GTK_ENTRY (editable)); ++} ++ ++/* GtkEntryBuffer signal handlers ++ */ ++static void ++buffer_inserted_text (GtkEntryBuffer *buffer, ++ guint position, ++ const gchar *chars, ++ guint n_chars, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ guint password_hint_timeout; ++ guint current_pos; ++ gint selection_bound; ++ ++ current_pos = priv->current_pos; ++ if (current_pos > position) ++ current_pos += n_chars; ++ ++ selection_bound = priv->selection_bound; ++ if (selection_bound > position) ++ selection_bound += n_chars; ++ ++ gtk_entry_set_positions (entry, current_pos, selection_bound); ++ gtk_entry_recompute (entry); ++ ++ /* Calculate the password hint if it needs to be displayed. */ ++ if (n_chars == 1 && !priv->visible) ++ { ++ g_object_get (gtk_widget_get_settings (GTK_WIDGET (entry)), ++ "gtk-entry-password-hint-timeout", &password_hint_timeout, ++ NULL); ++ ++ if (password_hint_timeout > 0) ++ { ++ GtkEntryPasswordHint *password_hint = g_object_get_qdata (G_OBJECT (entry), ++ quark_password_hint); ++ if (!password_hint) ++ { ++ password_hint = g_slice_new0 (GtkEntryPasswordHint); ++ g_object_set_qdata_full (G_OBJECT (entry), quark_password_hint, password_hint, ++ (GDestroyNotify)gtk_entry_password_hint_free); ++ } ++ ++ password_hint->position = position; ++ if (password_hint->source_id) ++ g_source_remove (password_hint->source_id); ++ password_hint->source_id = gdk_threads_add_timeout (password_hint_timeout, ++ (GSourceFunc)gtk_entry_remove_password_hint, entry); ++ g_source_set_name_by_id (password_hint->source_id, "[gtk+] gtk_entry_remove_password_hint"); ++ } ++ } ++} ++ ++static void ++buffer_deleted_text (GtkEntryBuffer *buffer, ++ guint position, ++ guint n_chars, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ guint end_pos = position + n_chars; ++ gint selection_bound; ++ guint current_pos; ++ ++ current_pos = priv->current_pos; ++ if (current_pos > position) ++ current_pos -= MIN (current_pos, end_pos) - position; ++ ++ selection_bound = priv->selection_bound; ++ if (selection_bound > position) ++ selection_bound -= MIN (selection_bound, end_pos) - position; ++ ++ gtk_entry_set_positions (entry, current_pos, selection_bound); ++ gtk_entry_recompute (entry); ++ ++ /* We might have deleted the selection */ ++ gtk_entry_update_primary_selection (entry); ++ ++ /* Disable the password hint if one exists. */ ++ if (!priv->visible) ++ { ++ GtkEntryPasswordHint *password_hint = g_object_get_qdata (G_OBJECT (entry), ++ quark_password_hint); ++ if (password_hint) ++ { ++ if (password_hint->source_id) ++ g_source_remove (password_hint->source_id); ++ password_hint->source_id = 0; ++ password_hint->position = -1; ++ } ++ } ++} ++ ++static void ++buffer_notify_text (GtkEntryBuffer *buffer, ++ GParamSpec *spec, ++ GtkEntry *entry) ++{ ++ if (entry->priv->handling_key_event) ++ gtk_entry_obscure_mouse_cursor (entry); ++ ++ emit_changed (entry); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_TEXT]); ++} ++ ++static void ++buffer_notify_length (GtkEntryBuffer *buffer, ++ GParamSpec *spec, ++ GtkEntry *entry) ++{ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_TEXT_LENGTH]); ++} ++ ++static void ++buffer_notify_max_length (GtkEntryBuffer *buffer, ++ GParamSpec *spec, ++ GtkEntry *entry) ++{ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_MAX_LENGTH]); ++} ++ ++static void ++buffer_connect_signals (GtkEntry *entry) ++{ ++ g_signal_connect (get_buffer (entry), "inserted-text", G_CALLBACK (buffer_inserted_text), entry); ++ g_signal_connect (get_buffer (entry), "deleted-text", G_CALLBACK (buffer_deleted_text), entry); ++ g_signal_connect (get_buffer (entry), "notify::text", G_CALLBACK (buffer_notify_text), entry); ++ g_signal_connect (get_buffer (entry), "notify::length", G_CALLBACK (buffer_notify_length), entry); ++ g_signal_connect (get_buffer (entry), "notify::max-length", G_CALLBACK (buffer_notify_max_length), entry); ++} ++ ++static void ++buffer_disconnect_signals (GtkEntry *entry) ++{ ++ g_signal_handlers_disconnect_by_func (get_buffer (entry), buffer_inserted_text, entry); ++ g_signal_handlers_disconnect_by_func (get_buffer (entry), buffer_deleted_text, entry); ++ g_signal_handlers_disconnect_by_func (get_buffer (entry), buffer_notify_text, entry); ++ g_signal_handlers_disconnect_by_func (get_buffer (entry), buffer_notify_length, entry); ++ g_signal_handlers_disconnect_by_func (get_buffer (entry), buffer_notify_max_length, entry); ++} ++ ++/* Compute the X position for an offset that corresponds to the "more important ++ * cursor position for that offset. We use this when trying to guess to which ++ * end of the selection we should go to when the user hits the left or ++ * right arrow key. ++ */ ++static gint ++get_better_cursor_x (GtkEntry *entry, ++ gint offset) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GdkKeymap *keymap = gdk_keymap_get_for_display (gtk_widget_get_display (GTK_WIDGET (entry))); ++ PangoDirection keymap_direction = gdk_keymap_get_direction (keymap); ++ gboolean split_cursor; ++ ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE); ++ const gchar *text = pango_layout_get_text (layout); ++ gint index = g_utf8_offset_to_pointer (text, offset) - text; ++ ++ PangoRectangle strong_pos, weak_pos; ++ ++ g_object_get (gtk_widget_get_settings (GTK_WIDGET (entry)), ++ "gtk-split-cursor", &split_cursor, ++ NULL); ++ ++ pango_layout_get_cursor_pos (layout, index, &strong_pos, &weak_pos); ++ ++ if (split_cursor) ++ return strong_pos.x / PANGO_SCALE; ++ else ++ return (keymap_direction == priv->resolved_dir) ? strong_pos.x / PANGO_SCALE : weak_pos.x / PANGO_SCALE; ++} ++ ++static void ++gtk_entry_move_cursor (GtkEntry *entry, ++ GtkMovementStep step, ++ gint count, ++ gboolean extend_selection) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gint new_pos = priv->current_pos; ++ ++ if (priv->current_pos != priv->selection_bound && !extend_selection) ++ { ++ /* If we have a current selection and aren't extending it, move to the ++ * start/or end of the selection as appropriate ++ */ ++ switch (step) ++ { ++ case GTK_MOVEMENT_VISUAL_POSITIONS: ++ { ++ gint current_x = get_better_cursor_x (entry, priv->current_pos); ++ gint bound_x = get_better_cursor_x (entry, priv->selection_bound); ++ ++ if (count <= 0) ++ new_pos = current_x < bound_x ? priv->current_pos : priv->selection_bound; ++ else ++ new_pos = current_x > bound_x ? priv->current_pos : priv->selection_bound; ++ } ++ break; ++ ++ case GTK_MOVEMENT_WORDS: ++ if (priv->resolved_dir == PANGO_DIRECTION_RTL) ++ count *= -1; ++ /* Fall through */ ++ ++ case GTK_MOVEMENT_LOGICAL_POSITIONS: ++ if (count < 0) ++ new_pos = MIN (priv->current_pos, priv->selection_bound); ++ else ++ new_pos = MAX (priv->current_pos, priv->selection_bound); ++ ++ break; ++ ++ case GTK_MOVEMENT_DISPLAY_LINE_ENDS: ++ case GTK_MOVEMENT_PARAGRAPH_ENDS: ++ case GTK_MOVEMENT_BUFFER_ENDS: ++ new_pos = count < 0 ? 0 : gtk_entry_buffer_get_length (get_buffer (entry)); ++ break; ++ ++ case GTK_MOVEMENT_DISPLAY_LINES: ++ case GTK_MOVEMENT_PARAGRAPHS: ++ case GTK_MOVEMENT_PAGES: ++ case GTK_MOVEMENT_HORIZONTAL_PAGES: ++ break; ++ } ++ } ++ else ++ { ++ switch (step) ++ { ++ case GTK_MOVEMENT_LOGICAL_POSITIONS: ++ new_pos = gtk_entry_move_logically (entry, new_pos, count); ++ break; ++ ++ case GTK_MOVEMENT_VISUAL_POSITIONS: ++ new_pos = gtk_entry_move_visually (entry, new_pos, count); ++ ++ if (priv->current_pos == new_pos) ++ { ++ if (!extend_selection) ++ { ++ if (!gtk_widget_keynav_failed (GTK_WIDGET (entry), ++ count > 0 ? ++ GTK_DIR_RIGHT : GTK_DIR_LEFT)) ++ { ++ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (entry)); ++ ++ if (toplevel) ++ gtk_widget_child_focus (toplevel, ++ count > 0 ? ++ GTK_DIR_RIGHT : GTK_DIR_LEFT); ++ } ++ } ++ else ++ { ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ } ++ } ++ break; ++ ++ case GTK_MOVEMENT_WORDS: ++ if (priv->resolved_dir == PANGO_DIRECTION_RTL) ++ count *= -1; ++ ++ while (count > 0) ++ { ++ new_pos = gtk_entry_move_forward_word (entry, new_pos, FALSE); ++ count--; ++ } ++ ++ while (count < 0) ++ { ++ new_pos = gtk_entry_move_backward_word (entry, new_pos, FALSE); ++ count++; ++ } ++ ++ if (priv->current_pos == new_pos) ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ ++ break; ++ ++ case GTK_MOVEMENT_DISPLAY_LINE_ENDS: ++ case GTK_MOVEMENT_PARAGRAPH_ENDS: ++ case GTK_MOVEMENT_BUFFER_ENDS: ++ new_pos = count < 0 ? 0 : gtk_entry_buffer_get_length (get_buffer (entry)); ++ ++ if (priv->current_pos == new_pos) ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ ++ break; ++ ++ case GTK_MOVEMENT_DISPLAY_LINES: ++ case GTK_MOVEMENT_PARAGRAPHS: ++ case GTK_MOVEMENT_PAGES: ++ case GTK_MOVEMENT_HORIZONTAL_PAGES: ++ break; ++ } ++ } ++ ++ if (extend_selection) ++ gtk_editable_select_region (GTK_EDITABLE (entry), priv->selection_bound, new_pos); ++ else ++ gtk_editable_set_position (GTK_EDITABLE (entry), new_pos); ++ ++ gtk_entry_pend_cursor_blink (entry); ++ ++ priv->need_im_reset = TRUE; ++ gtk_entry_reset_im_context (entry); ++} ++ ++static void ++gtk_entry_insert_at_cursor (GtkEntry *entry, ++ const gchar *str) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint pos = priv->current_pos; ++ ++ if (priv->editable) ++ { ++ gtk_entry_reset_im_context (entry); ++ gtk_editable_insert_text (editable, str, -1, &pos); ++ gtk_editable_set_position (editable, pos); ++ } ++} ++ ++static void ++gtk_entry_delete_from_cursor (GtkEntry *entry, ++ GtkDeleteType type, ++ gint count) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint start_pos = priv->current_pos; ++ gint end_pos = priv->current_pos; ++ gint old_n_bytes = gtk_entry_buffer_get_bytes (get_buffer (entry)); ++ ++ if (!priv->editable) ++ { ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ return; ++ } ++ ++ if (priv->selection_bound != priv->current_pos) ++ { ++ gtk_editable_delete_selection (editable); ++ priv->need_im_reset = TRUE; ++ gtk_entry_reset_im_context (entry); ++ return; ++ } ++ ++ switch (type) ++ { ++ case GTK_DELETE_CHARS: ++ end_pos = gtk_entry_move_logically (entry, priv->current_pos, count); ++ gtk_editable_delete_text (editable, MIN (start_pos, end_pos), MAX (start_pos, end_pos)); ++ break; ++ ++ case GTK_DELETE_WORDS: ++ if (count < 0) ++ { ++ /* Move to end of current word, or if not on a word, end of previous word */ ++ end_pos = gtk_entry_move_backward_word (entry, end_pos, FALSE); ++ end_pos = gtk_entry_move_forward_word (entry, end_pos, FALSE); ++ } ++ else if (count > 0) ++ { ++ /* Move to beginning of current word, or if not on a word, begining of next word */ ++ start_pos = gtk_entry_move_forward_word (entry, start_pos, FALSE); ++ start_pos = gtk_entry_move_backward_word (entry, start_pos, FALSE); ++ } ++ ++ /* Fall through */ ++ case GTK_DELETE_WORD_ENDS: ++ while (count < 0) ++ { ++ start_pos = gtk_entry_move_backward_word (entry, start_pos, FALSE); ++ count++; ++ } ++ ++ while (count > 0) ++ { ++ end_pos = gtk_entry_move_forward_word (entry, end_pos, FALSE); ++ count--; ++ } ++ ++ gtk_editable_delete_text (editable, start_pos, end_pos); ++ break; ++ ++ case GTK_DELETE_DISPLAY_LINE_ENDS: ++ case GTK_DELETE_PARAGRAPH_ENDS: ++ if (count < 0) ++ gtk_editable_delete_text (editable, 0, priv->current_pos); ++ else ++ gtk_editable_delete_text (editable, priv->current_pos, -1); ++ ++ break; ++ ++ case GTK_DELETE_DISPLAY_LINES: ++ case GTK_DELETE_PARAGRAPHS: ++ gtk_editable_delete_text (editable, 0, -1); ++ break; ++ ++ case GTK_DELETE_WHITESPACE: ++ gtk_entry_delete_whitespace (entry); ++ break; ++ } ++ ++ if (gtk_entry_buffer_get_bytes (get_buffer (entry)) == old_n_bytes) ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ else ++ { ++ priv->need_im_reset = TRUE; ++ gtk_entry_reset_im_context (entry); ++ } ++ ++ gtk_entry_pend_cursor_blink (entry); ++} ++ ++static void ++gtk_entry_backspace (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint prev_pos; ++ ++ if (!priv->editable) ++ { ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ return; ++ } ++ ++ if (priv->selection_bound != priv->current_pos) ++ { ++ gtk_editable_delete_selection (editable); ++ priv->need_im_reset = TRUE; ++ gtk_entry_reset_im_context (entry); ++ return; ++ } ++ ++ prev_pos = gtk_entry_move_logically (entry, priv->current_pos, -1); ++ ++ if (prev_pos < priv->current_pos) ++ { ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, FALSE); ++ PangoLogAttr *log_attrs; ++ gint n_attrs; ++ ++ pango_layout_get_log_attrs (layout, &log_attrs, &n_attrs); ++ ++ /* Deleting parts of characters */ ++ if (log_attrs[priv->current_pos].backspace_deletes_character) ++ { ++ gchar *cluster_text; ++ gchar *normalized_text; ++ glong len; ++ ++ cluster_text = _gtk_entry_get_display_text (entry, prev_pos, ++ priv->current_pos); ++ normalized_text = g_utf8_normalize (cluster_text, ++ strlen (cluster_text), ++ G_NORMALIZE_NFD); ++ len = g_utf8_strlen (normalized_text, -1); ++ ++ gtk_editable_delete_text (editable, prev_pos, priv->current_pos); ++ if (len > 1) ++ { ++ gint pos = priv->current_pos; ++ ++ gtk_editable_insert_text (editable, normalized_text, ++ g_utf8_offset_to_pointer (normalized_text, len - 1) - normalized_text, ++ &pos); ++ gtk_editable_set_position (editable, pos); ++ } ++ ++ g_free (normalized_text); ++ g_free (cluster_text); ++ } ++ else ++ { ++ gtk_editable_delete_text (editable, prev_pos, priv->current_pos); ++ } ++ ++ priv->need_im_reset = TRUE; ++ gtk_entry_reset_im_context (entry); ++ ++ g_free (log_attrs); ++ } ++ else ++ { ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ } ++ ++ gtk_entry_pend_cursor_blink (entry); ++} ++ ++static void ++gtk_entry_copy_clipboard (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint start, end; ++ gchar *str; ++ ++ if (gtk_editable_get_selection_bounds (editable, &start, &end)) ++ { ++ if (!priv->visible) ++ { ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ return; ++ } ++ ++ str = _gtk_entry_get_display_text (entry, start, end); ++ gtk_clipboard_set_text (gtk_widget_get_clipboard (GTK_WIDGET (entry), ++ GDK_SELECTION_CLIPBOARD), ++ str, -1); ++ g_free (str); ++ } ++} ++ ++static void ++gtk_entry_cut_clipboard (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint start, end; ++ ++ if (!priv->visible) ++ { ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ return; ++ } ++ ++ gtk_entry_copy_clipboard (entry); ++ ++ if (priv->editable) ++ { ++ if (gtk_editable_get_selection_bounds (editable, &start, &end)) ++ gtk_editable_delete_text (editable, start, end); ++ } ++ else ++ { ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ } ++ ++ gtk_entry_selection_bubble_popup_unset (entry); ++ ++ if (priv->text_handle) ++ { ++ GtkTextHandleMode handle_mode; ++ ++ handle_mode = _gtk_text_handle_get_mode (priv->text_handle); ++ ++ if (handle_mode != GTK_TEXT_HANDLE_MODE_NONE) ++ gtk_entry_update_handles (entry, GTK_TEXT_HANDLE_MODE_CURSOR); ++ } ++} ++ ++static void ++gtk_entry_paste_clipboard (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->editable) ++ gtk_entry_paste (entry, GDK_SELECTION_CLIPBOARD); ++ else ++ gtk_widget_error_bell (GTK_WIDGET (entry)); ++ ++ if (priv->text_handle) ++ { ++ GtkTextHandleMode handle_mode; ++ ++ handle_mode = _gtk_text_handle_get_mode (priv->text_handle); ++ ++ if (handle_mode != GTK_TEXT_HANDLE_MODE_NONE) ++ gtk_entry_update_handles (entry, GTK_TEXT_HANDLE_MODE_CURSOR); ++ } ++} ++ ++static void ++gtk_entry_delete_cb (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint start, end; ++ ++ if (priv->editable) ++ { ++ if (gtk_editable_get_selection_bounds (editable, &start, &end)) ++ gtk_editable_delete_text (editable, start, end); ++ } ++} ++ ++static void ++gtk_entry_toggle_overwrite (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ priv->overwrite_mode = !priv->overwrite_mode; ++ gtk_entry_pend_cursor_blink (entry); ++ gtk_widget_queue_draw (GTK_WIDGET (entry)); ++} ++ ++static void ++gtk_entry_select_all (GtkEntry *entry) ++{ ++ gtk_entry_select_line (entry); ++} ++ ++static void ++gtk_entry_real_activate (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkWindow *window; ++ GtkWidget *default_widget, *focus_widget; ++ GtkWidget *toplevel; ++ GtkWidget *widget; ++ ++ widget = GTK_WIDGET (entry); ++ ++ if (priv->activates_default) ++ { ++ toplevel = gtk_widget_get_toplevel (widget); ++ if (GTK_IS_WINDOW (toplevel)) ++ { ++ window = GTK_WINDOW (toplevel); ++ ++ if (window) ++ { ++ default_widget = gtk_window_get_default_widget (window); ++ focus_widget = gtk_window_get_focus (window); ++ if (widget != default_widget && ++ !(widget == focus_widget && (!default_widget || !gtk_widget_get_sensitive (default_widget)))) ++ gtk_window_activate_default (window); ++ } ++ } ++ } ++} ++ ++static void ++keymap_direction_changed (GdkKeymap *keymap, ++ GtkEntry *entry) ++{ ++ gtk_entry_recompute (entry); ++} ++ ++/* IM Context Callbacks ++ */ ++ ++static void ++gtk_entry_commit_cb (GtkIMContext *context, ++ const gchar *str, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->editable) ++ gtk_entry_enter_text (entry, str); ++} ++ ++static void ++gtk_entry_preedit_changed_cb (GtkIMContext *context, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->editable) ++ { ++ gchar *preedit_string; ++ gint cursor_pos; ++ ++ gtk_im_context_get_preedit_string (priv->im_context, ++ &preedit_string, NULL, ++ &cursor_pos); ++ g_signal_emit (entry, signals[PREEDIT_CHANGED], 0, preedit_string); ++ priv->preedit_length = strlen (preedit_string); ++ cursor_pos = CLAMP (cursor_pos, 0, g_utf8_strlen (preedit_string, -1)); ++ priv->preedit_cursor = cursor_pos; ++ g_free (preedit_string); ++ ++ gtk_entry_recompute (entry); ++ } ++} ++ ++static gboolean ++gtk_entry_retrieve_surrounding_cb (GtkIMContext *context, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gchar *text; ++ ++ /* XXXX ??? does this even make sense when text is not visible? Should we return FALSE? */ ++ text = _gtk_entry_get_display_text (entry, 0, -1); ++ gtk_im_context_set_surrounding (context, text, strlen (text), /* Length in bytes */ ++ g_utf8_offset_to_pointer (text, priv->current_pos) - text); ++ g_free (text); ++ ++ return TRUE; ++} ++ ++static gboolean ++gtk_entry_delete_surrounding_cb (GtkIMContext *slave, ++ gint offset, ++ gint n_chars, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->editable) ++ gtk_editable_delete_text (GTK_EDITABLE (entry), ++ priv->current_pos + offset, ++ priv->current_pos + offset + n_chars); ++ ++ return TRUE; ++} ++ ++/* Internal functions ++ */ ++ ++/* Used for im_commit_cb and inserting Unicode chars */ ++void ++gtk_entry_enter_text (GtkEntry *entry, ++ const gchar *str) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ gint tmp_pos; ++ guint text_length; ++ ++ priv->need_im_reset = FALSE; ++ ++ if (gtk_editable_get_selection_bounds (editable, NULL, NULL)) ++ gtk_editable_delete_selection (editable); ++ else ++ { ++ if (priv->overwrite_mode) ++ { ++ text_length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ if (priv->current_pos < text_length) ++ gtk_entry_delete_from_cursor (entry, GTK_DELETE_CHARS, 1); ++ } ++ } ++ ++ tmp_pos = priv->current_pos; ++ gtk_editable_insert_text (editable, str, strlen (str), &tmp_pos); ++ gtk_editable_set_position (editable, tmp_pos); ++} ++ ++/* All changes to priv->current_pos and priv->selection_bound ++ * should go through this function. ++ */ ++void ++gtk_entry_set_positions (GtkEntry *entry, ++ gint current_pos, ++ gint selection_bound) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gboolean changed = FALSE; ++ ++ g_object_freeze_notify (G_OBJECT (entry)); ++ ++ if (current_pos != -1 && ++ priv->current_pos != current_pos) ++ { ++ priv->current_pos = current_pos; ++ changed = TRUE; ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_CURSOR_POSITION]); ++ } ++ ++ if (selection_bound != -1 && ++ priv->selection_bound != selection_bound) ++ { ++ priv->selection_bound = selection_bound; ++ changed = TRUE; ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_SELECTION_BOUND]); ++ } ++ ++ g_object_thaw_notify (G_OBJECT (entry)); ++ ++ if (priv->current_pos != priv->selection_bound) ++ { ++ if (!priv->selection_node) ++ { ++ GtkCssNode *widget_node; ++ ++ widget_node = gtk_css_gadget_get_node (priv->gadget); ++ priv->selection_node = gtk_css_node_new (); ++ gtk_css_node_set_name (priv->selection_node, I_("selection")); ++ gtk_css_node_set_parent (priv->selection_node, widget_node); ++ gtk_css_node_set_state (priv->selection_node, gtk_css_node_get_state (widget_node)); ++ g_object_unref (priv->selection_node); ++ } ++ } ++ else ++ { ++ if (priv->selection_node) ++ { ++ gtk_css_node_set_parent (priv->selection_node, NULL); ++ priv->selection_node = NULL; ++ } ++ } ++ ++ if (changed) ++ { ++ gtk_entry_move_adjustments (entry); ++ gtk_entry_recompute (entry); ++ } ++} ++ ++static void ++gtk_entry_reset_layout (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->cached_layout) ++ { ++ g_object_unref (priv->cached_layout); ++ priv->cached_layout = NULL; ++ } ++} ++ ++static void ++update_im_cursor_location (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GdkRectangle area; ++ gint strong_x; ++ gint strong_xoffset; ++ gint area_width, area_height; ++ ++ gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &strong_x, NULL); ++ gtk_entry_get_text_area_size (entry, NULL, NULL, &area_width, &area_height); ++ ++ strong_xoffset = strong_x - priv->scroll_offset; ++ if (strong_xoffset < 0) ++ { ++ strong_xoffset = 0; ++ } ++ else if (strong_xoffset > area_width) ++ { ++ strong_xoffset = area_width; ++ } ++ area.x = strong_xoffset; ++ area.y = 0; ++ area.width = 0; ++ area.height = area_height; ++ ++ gtk_im_context_set_cursor_location (priv->im_context, &area); ++} ++ ++static void ++gtk_entry_recompute (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkTextHandleMode handle_mode; ++ ++ gtk_entry_reset_layout (entry); ++ gtk_entry_check_cursor_blink (entry); ++ ++ gtk_entry_adjust_scroll (entry); ++ ++ update_im_cursor_location (entry); ++ ++ if (priv->text_handle) ++ { ++ handle_mode = _gtk_text_handle_get_mode (priv->text_handle); ++ ++ if (handle_mode != GTK_TEXT_HANDLE_MODE_NONE) ++ gtk_entry_update_handles (entry, handle_mode); ++ } ++ ++ gtk_widget_queue_draw (GTK_WIDGET (entry)); ++} ++ ++static void ++gtk_entry_get_placeholder_text_color (GtkEntry *entry, ++ PangoColor *color) ++{ ++ GtkWidget *widget = GTK_WIDGET (entry); ++ GtkStyleContext *context; ++ GdkRGBA fg = { 0.5, 0.5, 0.5 }; ++ ++ context = gtk_widget_get_style_context (widget); ++ gtk_style_context_lookup_color (context, "placeholder_text_color", &fg); ++ ++ color->red = CLAMP (fg.red * 65535. + 0.5, 0, 65535); ++ color->green = CLAMP (fg.green * 65535. + 0.5, 0, 65535); ++ color->blue = CLAMP (fg.blue * 65535. + 0.5, 0, 65535); ++} ++ ++static inline gboolean ++show_placeholder_text (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (!gtk_widget_has_focus (GTK_WIDGET (entry)) && ++ gtk_entry_buffer_get_bytes (get_buffer (entry)) == 0 && ++ priv->placeholder_text != NULL) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++static PangoLayout * ++gtk_entry_create_layout (GtkEntry *entry, ++ gboolean include_preedit) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkWidget *widget = GTK_WIDGET (entry); ++ GtkStyleContext *context; ++ PangoLayout *layout; ++ PangoAttrList *tmp_attrs; ++ gboolean placeholder_layout; ++ ++ gchar *preedit_string = NULL; ++ gint preedit_length = 0; ++ PangoAttrList *preedit_attrs = NULL; ++ ++ gchar *display_text; ++ guint n_bytes; ++ ++ context = gtk_widget_get_style_context (widget); ++ ++ layout = gtk_widget_create_pango_layout (widget, NULL); ++ pango_layout_set_single_paragraph_mode (layout, TRUE); ++ ++ tmp_attrs = _gtk_style_context_get_pango_attributes (context); ++ tmp_attrs = _gtk_pango_attr_list_merge (tmp_attrs, priv->attrs); ++ if (!tmp_attrs) ++ tmp_attrs = pango_attr_list_new (); ++ ++ placeholder_layout = show_placeholder_text (entry); ++ if (placeholder_layout) ++ display_text = g_strdup (priv->placeholder_text); ++ else ++ display_text = _gtk_entry_get_display_text (entry, 0, -1); ++ ++ n_bytes = strlen (display_text); ++ ++ if (!placeholder_layout && include_preedit) ++ { ++ gtk_im_context_get_preedit_string (priv->im_context, ++ &preedit_string, &preedit_attrs, NULL); ++ preedit_length = priv->preedit_length; ++ } ++ else if (placeholder_layout) ++ { ++ PangoColor color; ++ PangoAttribute *attr; ++ ++ gtk_entry_get_placeholder_text_color (entry, &color); ++ attr = pango_attr_foreground_new (color.red, color.green, color.blue); ++ attr->start_index = 0; ++ attr->end_index = G_MAXINT; ++ pango_attr_list_insert (tmp_attrs, attr); ++ pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END); ++ } ++ ++ if (preedit_length) ++ { ++ GString *tmp_string = g_string_new (display_text); ++ gint pos; ++ ++ pos = g_utf8_offset_to_pointer (display_text, priv->current_pos) - display_text; ++ g_string_insert (tmp_string, pos, preedit_string); ++ pango_layout_set_text (layout, tmp_string->str, tmp_string->len); ++ pango_attr_list_splice (tmp_attrs, preedit_attrs, pos, preedit_length); ++ g_string_free (tmp_string, TRUE); ++ } ++ else ++ { ++ PangoDirection pango_dir; ++ ++ if (gtk_entry_get_display_mode (entry) == DISPLAY_NORMAL) ++ pango_dir = _gtk_pango_find_base_dir (display_text, n_bytes); ++ else ++ pango_dir = PANGO_DIRECTION_NEUTRAL; ++ ++ if (pango_dir == PANGO_DIRECTION_NEUTRAL) ++ { ++ if (gtk_widget_has_focus (widget)) ++ { ++ GdkDisplay *display = gtk_widget_get_display (widget); ++ GdkKeymap *keymap = gdk_keymap_get_for_display (display); ++ if (gdk_keymap_get_direction (keymap) == PANGO_DIRECTION_RTL) ++ pango_dir = PANGO_DIRECTION_RTL; ++ else ++ pango_dir = PANGO_DIRECTION_LTR; ++ } ++ else ++ { ++ if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ++ pango_dir = PANGO_DIRECTION_RTL; ++ else ++ pango_dir = PANGO_DIRECTION_LTR; ++ } ++ } ++ ++ pango_context_set_base_dir (gtk_widget_get_pango_context (widget), pango_dir); ++ ++ priv->resolved_dir = pango_dir; ++ ++ pango_layout_set_text (layout, display_text, n_bytes); ++ } ++ ++ pango_layout_set_attributes (layout, tmp_attrs); ++ ++ if (priv->tabs) ++ pango_layout_set_tabs (layout, priv->tabs); ++ ++ g_free (preedit_string); ++ g_free (display_text); ++ ++ if (preedit_attrs) ++ pango_attr_list_unref (preedit_attrs); ++ ++ pango_attr_list_unref (tmp_attrs); ++ ++ return layout; ++} ++ ++static PangoLayout * ++gtk_entry_ensure_layout (GtkEntry *entry, ++ gboolean include_preedit) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->preedit_length > 0 && ++ !include_preedit != !priv->cache_includes_preedit) ++ gtk_entry_reset_layout (entry); ++ ++ if (!priv->cached_layout) ++ { ++ priv->cached_layout = gtk_entry_create_layout (entry, include_preedit); ++ priv->cache_includes_preedit = include_preedit; ++ } ++ ++ return priv->cached_layout; ++} ++ ++static void ++get_layout_position (GtkEntry *entry, ++ gint *x, ++ gint *y) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ PangoLayout *layout; ++ PangoRectangle logical_rect; ++ gint y_pos, area_height; ++ PangoLayoutLine *line; ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ ++ area_height = PANGO_SCALE * priv->text_allocation.height; ++ ++ line = pango_layout_get_lines_readonly (layout)->data; ++ pango_layout_line_get_extents (line, NULL, &logical_rect); ++ ++ /* Align primarily for locale's ascent/descent */ ++ if (priv->text_baseline < 0) ++ y_pos = ((area_height - priv->ascent - priv->descent) / 2 + ++ priv->ascent + logical_rect.y); ++ else ++ y_pos = PANGO_SCALE * priv->text_baseline - pango_layout_get_baseline (layout); ++ ++ /* Now see if we need to adjust to fit in actual drawn string */ ++ if (logical_rect.height > area_height) ++ y_pos = (area_height - logical_rect.height) / 2; ++ else if (y_pos < 0) ++ y_pos = 0; ++ else if (y_pos + logical_rect.height > area_height) ++ y_pos = area_height - logical_rect.height; ++ ++ y_pos = y_pos / PANGO_SCALE; ++ ++ if (x) ++ *x = - priv->scroll_offset; ++ ++ if (y) ++ *y = y_pos; ++} ++ ++static void ++gtk_entry_draw_text (GtkEntry *entry, ++ cairo_t *cr) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkWidget *widget = GTK_WIDGET (entry); ++ GtkStyleContext *context; ++ PangoLayout *layout; ++ gint x, y; ++ gint start_pos, end_pos; ++ GtkAllocation allocation; ++ ++ /* Nothing to display at all */ ++ if (gtk_entry_get_display_mode (entry) == DISPLAY_BLANK) ++ return; ++ ++ context = gtk_widget_get_style_context (widget); ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ ++ cairo_save (cr); ++ ++ cairo_rectangle (cr, ++ priv->text_allocation.x - allocation.x, ++ priv->text_allocation.y - allocation.y, ++ priv->text_allocation.width, ++ priv->text_allocation.height); ++ cairo_clip (cr); ++ ++ gtk_entry_get_layout_offsets (entry, &x, &y); ++ ++ if (show_placeholder_text (entry)) ++ pango_layout_set_width (layout, PANGO_SCALE * priv->text_allocation.width); ++ ++ gtk_render_layout (context, cr, x, y, layout); ++ ++ if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos)) ++ { ++ const char *text = pango_layout_get_text (layout); ++ gint start_index = g_utf8_offset_to_pointer (text, start_pos) - text; ++ gint end_index = g_utf8_offset_to_pointer (text, end_pos) - text; ++ cairo_region_t *clip; ++ gint range[2]; ++ ++ range[0] = MIN (start_index, end_index); ++ range[1] = MAX (start_index, end_index); ++ ++ gtk_style_context_save_to_node (context, priv->selection_node); ++ ++ clip = gdk_pango_layout_get_clip_region (layout, x, y, range, 1); ++ gdk_cairo_region (cr, clip); ++ cairo_clip (cr); ++ cairo_region_destroy (clip); ++ ++ gtk_render_background (context, cr, ++ 0, 0, ++ allocation.width, allocation.height); ++ ++ gtk_render_layout (context, cr, x, y, layout); ++ ++ gtk_style_context_restore (context); ++ } ++ ++ cairo_restore (cr); ++} ++ ++static void ++gtk_entry_draw_cursor (GtkEntry *entry, ++ cairo_t *cr, ++ CursorType type) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkWidget *widget = GTK_WIDGET (entry); ++ GtkStyleContext *context; ++ PangoRectangle cursor_rect; ++ gint cursor_index; ++ gboolean block; ++ gboolean block_at_line_end; ++ PangoLayout *layout; ++ const char *text; ++ gint x, y; ++ ++ context = gtk_widget_get_style_context (widget); ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ text = pango_layout_get_text (layout); ++ gtk_entry_get_layout_offsets (entry, &x, &y); ++ ++ if (type == CURSOR_DND) ++ cursor_index = g_utf8_offset_to_pointer (text, priv->dnd_position) - text; ++ else ++ cursor_index = g_utf8_offset_to_pointer (text, priv->current_pos + priv->preedit_cursor) - text; ++ ++ if (!priv->overwrite_mode) ++ block = FALSE; ++ else ++ block = _gtk_text_util_get_block_cursor_location (layout, ++ cursor_index, &cursor_rect, &block_at_line_end); ++ ++ if (!block) ++ { ++ gtk_render_insertion_cursor (context, cr, ++ x, y, ++ layout, cursor_index, priv->resolved_dir); ++ } ++ else /* overwrite_mode */ ++ { ++ GdkRGBA cursor_color; ++ GdkRectangle rect; ++ ++ cairo_save (cr); ++ ++ rect.x = PANGO_PIXELS (cursor_rect.x) + x; ++ rect.y = PANGO_PIXELS (cursor_rect.y) + y; ++ rect.width = PANGO_PIXELS (cursor_rect.width); ++ rect.height = PANGO_PIXELS (cursor_rect.height); ++ ++ _gtk_style_context_get_cursor_color (context, &cursor_color, NULL); ++ gdk_cairo_set_source_rgba (cr, &cursor_color); ++ gdk_cairo_rectangle (cr, &rect); ++ cairo_fill (cr); ++ ++ if (!block_at_line_end) ++ { ++ GdkRGBA color; ++ ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ gtk_style_context_get_background_color (context, ++ gtk_style_context_get_state (context), ++ &color); ++G_GNUC_END_IGNORE_DEPRECATIONS ++ ++ gdk_cairo_rectangle (cr, &rect); ++ cairo_clip (cr); ++ cairo_move_to (cr, x, y); ++ gdk_cairo_set_source_rgba (cr, &color); ++ pango_cairo_show_layout (cr, layout); ++ } ++ ++ cairo_restore (cr); ++ } ++} ++ ++static void ++gtk_entry_handle_dragged (GtkTextHandle *handle, ++ GtkTextHandlePosition pos, ++ gint x, ++ gint y, ++ GtkEntry *entry) ++{ ++ gint cursor_pos, selection_bound_pos, tmp_pos; ++ GtkEntryPrivate *priv = entry->priv; ++ GtkTextHandleMode mode; ++ gint *min, *max; ++ ++ gtk_entry_selection_bubble_popup_unset (entry); ++ ++ cursor_pos = priv->current_pos; ++ selection_bound_pos = priv->selection_bound; ++ mode = _gtk_text_handle_get_mode (handle); ++ ++ tmp_pos = gtk_entry_find_position (entry, x + priv->scroll_offset); ++ ++ if (mode == GTK_TEXT_HANDLE_MODE_CURSOR || ++ cursor_pos >= selection_bound_pos) ++ { ++ max = &cursor_pos; ++ min = &selection_bound_pos; ++ } ++ else ++ { ++ max = &selection_bound_pos; ++ min = &cursor_pos; ++ } ++ ++ if (pos == GTK_TEXT_HANDLE_POSITION_SELECTION_END) ++ { ++ if (mode == GTK_TEXT_HANDLE_MODE_SELECTION) ++ { ++ gint min_pos; ++ ++ min_pos = MAX (*min + 1, 0); ++ tmp_pos = MAX (tmp_pos, min_pos); ++ } ++ ++ *max = tmp_pos; ++ } ++ else ++ { ++ if (mode == GTK_TEXT_HANDLE_MODE_SELECTION) ++ { ++ gint max_pos; ++ ++ max_pos = *max - 1; ++ *min = MIN (tmp_pos, max_pos); ++ } ++ } ++ ++ if (cursor_pos != priv->current_pos || ++ selection_bound_pos != priv->selection_bound) ++ { ++ if (mode == GTK_TEXT_HANDLE_MODE_CURSOR) ++ { ++ entry->priv->cursor_handle_dragged = TRUE; ++ gtk_entry_set_positions (entry, cursor_pos, cursor_pos); ++ } ++ else ++ { ++ entry->priv->selection_handle_dragged = TRUE; ++ gtk_entry_set_positions (entry, cursor_pos, selection_bound_pos); ++ } ++ ++ gtk_entry_update_handles (entry, mode); ++ } ++ ++ gtk_entry_show_magnifier (entry, x, y); ++} ++ ++static void ++gtk_entry_handle_drag_started (GtkTextHandle *handle, ++ GtkTextHandlePosition pos, ++ GtkEntry *entry) ++{ ++ entry->priv->cursor_handle_dragged = FALSE; ++ entry->priv->selection_handle_dragged = FALSE; ++} ++ ++static void ++gtk_entry_handle_drag_finished (GtkTextHandle *handle, ++ GtkTextHandlePosition pos, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (!priv->cursor_handle_dragged && !priv->selection_handle_dragged) ++ { ++ GtkSettings *settings; ++ guint double_click_time; ++ ++ settings = gtk_widget_get_settings (GTK_WIDGET (entry)); ++ g_object_get (settings, "gtk-double-click-time", &double_click_time, NULL); ++ if (g_get_monotonic_time() - priv->handle_place_time < double_click_time * 1000) ++ { ++ gtk_entry_select_word (entry); ++ gtk_entry_update_handles (entry, GTK_TEXT_HANDLE_MODE_SELECTION); ++ } ++ else ++ gtk_entry_selection_bubble_popup_set (entry); ++ } ++ ++ if (priv->magnifier_popover) ++ gtk_popover_popdown (GTK_POPOVER (priv->magnifier_popover)); ++} ++ ++ ++/** ++ * gtk_entry_reset_im_context: ++ * @entry: a #GtkEntry ++ * ++ * Reset the input method context of the entry if needed. ++ * ++ * This can be necessary in the case where modifying the buffer ++ * would confuse on-going input method behavior. ++ * ++ * Since: 2.22 ++ */ ++void ++gtk_entry_reset_im_context (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ if (priv->need_im_reset) ++ { ++ priv->need_im_reset = FALSE; ++ gtk_im_context_reset (priv->im_context); ++ } ++} ++ ++/** ++ * gtk_entry_im_context_filter_keypress: ++ * @entry: a #GtkEntry ++ * @event: (type Gdk.EventKey): the key event ++ * ++ * Allow the #GtkEntry input method to internally handle key press ++ * and release events. If this function returns %TRUE, then no further ++ * processing should be done for this key event. See ++ * gtk_im_context_filter_keypress(). ++ * ++ * Note that you are expected to call this function from your handler ++ * when overriding key event handling. This is needed in the case when ++ * you need to insert your own key handling between the input method ++ * and the default key event handling of the #GtkEntry. ++ * See gtk_text_view_reset_im_context() for an example of use. ++ * ++ * Returns: %TRUE if the input method handled the key event. ++ * ++ * Since: 2.22 ++ */ ++gboolean ++gtk_entry_im_context_filter_keypress (GtkEntry *entry, ++ GdkEventKey *event) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); ++ ++ priv = entry->priv; ++ ++ return gtk_im_context_filter_keypress (priv->im_context, event); ++} ++ ++GtkIMContext* ++_gtk_entry_get_im_context (GtkEntry *entry) ++{ ++ return entry->priv->im_context; ++} ++ ++GtkCssGadget * ++gtk_entry_get_gadget (GtkEntry *entry) ++{ ++ return entry->priv->gadget; ++} ++ ++static gint ++gtk_entry_find_position (GtkEntry *entry, ++ gint x) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ PangoLayout *layout; ++ PangoLayoutLine *line; ++ gint index; ++ gint pos; ++ gint trailing; ++ const gchar *text; ++ gint cursor_index; ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ text = pango_layout_get_text (layout); ++ cursor_index = g_utf8_offset_to_pointer (text, priv->current_pos) - text; ++ ++ line = pango_layout_get_lines_readonly (layout)->data; ++ pango_layout_line_x_to_index (line, x * PANGO_SCALE, &index, &trailing); ++ ++ if (index >= cursor_index && priv->preedit_length) ++ { ++ if (index >= cursor_index + priv->preedit_length) ++ index -= priv->preedit_length; ++ else ++ { ++ index = cursor_index; ++ trailing = 0; ++ } ++ } ++ ++ pos = g_utf8_pointer_to_offset (text, text + index); ++ pos += trailing; ++ ++ return pos; ++} ++ ++static void ++gtk_entry_get_cursor_locations (GtkEntry *entry, ++ CursorType type, ++ gint *strong_x, ++ gint *weak_x) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ DisplayMode mode = gtk_entry_get_display_mode (entry); ++ ++ /* Nothing to display at all, so no cursor is relevant */ ++ if (mode == DISPLAY_BLANK) ++ { ++ if (strong_x) ++ *strong_x = 0; ++ ++ if (weak_x) ++ *weak_x = 0; ++ } ++ else ++ { ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE); ++ const gchar *text = pango_layout_get_text (layout); ++ PangoRectangle strong_pos, weak_pos; ++ gint index; ++ ++ if (type == CURSOR_STANDARD) ++ { ++ index = g_utf8_offset_to_pointer (text, priv->current_pos + priv->preedit_cursor) - text; ++ } ++ else /* type == CURSOR_DND */ ++ { ++ index = g_utf8_offset_to_pointer (text, priv->dnd_position) - text; ++ ++ if (priv->dnd_position > priv->current_pos) ++ { ++ if (mode == DISPLAY_NORMAL) ++ index += priv->preedit_length; ++ else ++ { ++ gint preedit_len_chars = g_utf8_strlen (text, -1) - gtk_entry_buffer_get_length (get_buffer (entry)); ++ index += preedit_len_chars * g_unichar_to_utf8 (priv->invisible_char, NULL); ++ } ++ } ++ } ++ ++ pango_layout_get_cursor_pos (layout, index, &strong_pos, &weak_pos); ++ ++ if (strong_x) ++ *strong_x = strong_pos.x / PANGO_SCALE; ++ ++ if (weak_x) ++ *weak_x = weak_pos.x / PANGO_SCALE; ++ } ++} ++ ++static gboolean ++gtk_entry_get_is_selection_handle_dragged (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkTextHandlePosition pos; ++ ++ if (!priv->text_handle) ++ return FALSE; ++ ++ if (_gtk_text_handle_get_mode (priv->text_handle) != GTK_TEXT_HANDLE_MODE_SELECTION) ++ return FALSE; ++ ++ if (priv->current_pos >= priv->selection_bound) ++ pos = GTK_TEXT_HANDLE_POSITION_SELECTION_START; ++ else ++ pos = GTK_TEXT_HANDLE_POSITION_SELECTION_END; ++ ++ return _gtk_text_handle_get_is_dragged (priv->text_handle, pos); ++} ++ ++static void ++gtk_entry_get_scroll_limits (GtkEntry *entry, ++ gint *min_offset, ++ gint *max_offset) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gfloat xalign; ++ PangoLayout *layout; ++ PangoLayoutLine *line; ++ PangoRectangle logical_rect; ++ gint text_width; ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ line = pango_layout_get_lines_readonly (layout)->data; ++ ++ pango_layout_line_get_extents (line, NULL, &logical_rect); ++ ++ /* Display as much text as we can */ ++ ++ if (priv->resolved_dir == PANGO_DIRECTION_LTR) ++ xalign = priv->xalign; ++ else ++ xalign = 1.0 - priv->xalign; ++ ++ text_width = PANGO_PIXELS(logical_rect.width); ++ ++ if (text_width > priv->text_allocation.width) ++ { ++ *min_offset = 0; ++ *max_offset = text_width - priv->text_allocation.width; ++ } ++ else ++ { ++ *min_offset = (text_width - priv->text_allocation.width) * xalign; ++ *max_offset = *min_offset; ++ } ++} ++ ++static void ++gtk_entry_adjust_scroll (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gint min_offset, max_offset; ++ gint strong_x, weak_x; ++ gint strong_xoffset, weak_xoffset; ++ GtkTextHandleMode handle_mode; ++ ++ if (!gtk_widget_get_realized (GTK_WIDGET (entry))) ++ return; ++ ++ gtk_entry_get_scroll_limits (entry, &min_offset, &max_offset); ++ ++ priv->scroll_offset = CLAMP (priv->scroll_offset, min_offset, max_offset); ++ ++ if (gtk_entry_get_is_selection_handle_dragged (entry)) ++ { ++ /* The text handle corresponding to the selection bound is ++ * being dragged, ensure it stays onscreen even if we scroll ++ * cursors away, this is so both handles can cause content ++ * to scroll. ++ */ ++ strong_x = weak_x = gtk_entry_get_selection_bound_location (entry); ++ } ++ else ++ { ++ /* And make sure cursors are on screen. Note that the cursor is ++ * actually drawn one pixel into the INNER_BORDER space on ++ * the right, when the scroll is at the utmost right. This ++ * looks better to to me than confining the cursor inside the ++ * border entirely, though it means that the cursor gets one ++ * pixel closer to the edge of the widget on the right than ++ * on the left. This might need changing if one changed ++ * INNER_BORDER from 2 to 1, as one would do on a ++ * small-screen-real-estate display. ++ * ++ * We always make sure that the strong cursor is on screen, and ++ * put the weak cursor on screen if possible. ++ */ ++ gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &strong_x, &weak_x); ++ } ++ ++ strong_xoffset = strong_x - priv->scroll_offset; ++ ++ if (strong_xoffset < 0) ++ { ++ priv->scroll_offset += strong_xoffset; ++ strong_xoffset = 0; ++ } ++ else if (strong_xoffset > priv->text_allocation.width) ++ { ++ priv->scroll_offset += strong_xoffset - priv->text_allocation.width; ++ strong_xoffset = priv->text_allocation.width; ++ } ++ ++ weak_xoffset = weak_x - priv->scroll_offset; ++ ++ if (weak_xoffset < 0 && strong_xoffset - weak_xoffset <= priv->text_allocation.width) ++ { ++ priv->scroll_offset += weak_xoffset; ++ } ++ else if (weak_xoffset > priv->text_allocation.width && ++ strong_xoffset - (weak_xoffset - priv->text_allocation.width) >= 0) ++ { ++ priv->scroll_offset += weak_xoffset - priv->text_allocation.width; ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_SCROLL_OFFSET]); ++ ++ if (priv->text_handle) ++ { ++ handle_mode = _gtk_text_handle_get_mode (priv->text_handle); ++ ++ if (handle_mode != GTK_TEXT_HANDLE_MODE_NONE) ++ gtk_entry_update_handles (entry, handle_mode); ++ } ++} ++ ++static void ++gtk_entry_move_adjustments (GtkEntry *entry) ++{ ++ GtkWidget *widget = GTK_WIDGET (entry); ++ GtkAllocation allocation; ++ GtkAdjustment *adjustment; ++ PangoContext *context; ++ PangoFontMetrics *metrics; ++ gint x, layout_x; ++ gint char_width; ++ ++ adjustment = g_object_get_qdata (G_OBJECT (entry), quark_cursor_hadjustment); ++ if (!adjustment) ++ return; ++ ++ gtk_css_gadget_get_content_allocation (entry->priv->gadget, &allocation, NULL); ++ ++ /* Cursor/char position, layout offset, border width, and widget allocation */ ++ gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &x, NULL); ++ get_layout_position (entry, &layout_x, NULL); ++ x += allocation.x + layout_x; ++ ++ /* Approximate width of a char, so user can see what is ahead/behind */ ++ context = gtk_widget_get_pango_context (widget); ++ ++ metrics = pango_context_get_metrics (context, ++ pango_context_get_font_description (context), ++ pango_context_get_language (context)); ++ char_width = pango_font_metrics_get_approximate_char_width (metrics) / PANGO_SCALE; ++ ++ /* Scroll it */ ++ gtk_adjustment_clamp_page (adjustment, ++ x - (char_width + 1), /* one char + one pixel before */ ++ x + (char_width + 2)); /* one char + cursor + one pixel after */ ++} ++ ++static gint ++gtk_entry_move_visually (GtkEntry *entry, ++ gint start, ++ gint count) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gint index; ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, FALSE); ++ const gchar *text; ++ ++ text = pango_layout_get_text (layout); ++ ++ index = g_utf8_offset_to_pointer (text, start) - text; ++ ++ while (count != 0) ++ { ++ int new_index, new_trailing; ++ gboolean split_cursor; ++ gboolean strong; ++ ++ g_object_get (gtk_widget_get_settings (GTK_WIDGET (entry)), ++ "gtk-split-cursor", &split_cursor, ++ NULL); ++ ++ if (split_cursor) ++ strong = TRUE; ++ else ++ { ++ GdkKeymap *keymap = gdk_keymap_get_for_display (gtk_widget_get_display (GTK_WIDGET (entry))); ++ PangoDirection keymap_direction = gdk_keymap_get_direction (keymap); ++ ++ strong = keymap_direction == priv->resolved_dir; ++ } ++ ++ if (count > 0) ++ { ++ pango_layout_move_cursor_visually (layout, strong, index, 0, 1, &new_index, &new_trailing); ++ count--; ++ } ++ else ++ { ++ pango_layout_move_cursor_visually (layout, strong, index, 0, -1, &new_index, &new_trailing); ++ count++; ++ } ++ ++ if (new_index < 0) ++ index = 0; ++ else if (new_index != G_MAXINT) ++ index = new_index; ++ ++ while (new_trailing--) ++ index = g_utf8_next_char (text + index) - text; ++ } ++ ++ return g_utf8_pointer_to_offset (text, text + index); ++} ++ ++static gint ++gtk_entry_move_logically (GtkEntry *entry, ++ gint start, ++ gint count) ++{ ++ gint new_pos = start; ++ guint length; ++ ++ length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ ++ /* Prevent any leak of information */ ++ if (gtk_entry_get_display_mode (entry) != DISPLAY_NORMAL) ++ { ++ new_pos = CLAMP (start + count, 0, length); ++ } ++ else ++ { ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, FALSE); ++ PangoLogAttr *log_attrs; ++ gint n_attrs; ++ ++ pango_layout_get_log_attrs (layout, &log_attrs, &n_attrs); ++ ++ while (count > 0 && new_pos < length) ++ { ++ do ++ new_pos++; ++ while (new_pos < length && !log_attrs[new_pos].is_cursor_position); ++ ++ count--; ++ } ++ while (count < 0 && new_pos > 0) ++ { ++ do ++ new_pos--; ++ while (new_pos > 0 && !log_attrs[new_pos].is_cursor_position); ++ ++ count++; ++ } ++ ++ g_free (log_attrs); ++ } ++ ++ return new_pos; ++} ++ ++static gint ++gtk_entry_move_forward_word (GtkEntry *entry, ++ gint start, ++ gboolean allow_whitespace) ++{ ++ gint new_pos = start; ++ guint length; ++ ++ length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ ++ /* Prevent any leak of information */ ++ if (gtk_entry_get_display_mode (entry) != DISPLAY_NORMAL) ++ { ++ new_pos = length; ++ } ++ else if (new_pos < length) ++ { ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, FALSE); ++ PangoLogAttr *log_attrs; ++ gint n_attrs; ++ ++ pango_layout_get_log_attrs (layout, &log_attrs, &n_attrs); ++ ++ /* Find the next word boundary */ ++ new_pos++; ++ while (new_pos < n_attrs - 1 && !(log_attrs[new_pos].is_word_end || ++ (log_attrs[new_pos].is_word_start && allow_whitespace))) ++ new_pos++; ++ ++ g_free (log_attrs); ++ } ++ ++ return new_pos; ++} ++ ++ ++static gint ++gtk_entry_move_backward_word (GtkEntry *entry, ++ gint start, ++ gboolean allow_whitespace) ++{ ++ gint new_pos = start; ++ ++ /* Prevent any leak of information */ ++ if (gtk_entry_get_display_mode (entry) != DISPLAY_NORMAL) ++ { ++ new_pos = 0; ++ } ++ else if (start > 0) ++ { ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, FALSE); ++ PangoLogAttr *log_attrs; ++ gint n_attrs; ++ ++ pango_layout_get_log_attrs (layout, &log_attrs, &n_attrs); ++ ++ new_pos = start - 1; ++ ++ /* Find the previous word boundary */ ++ while (new_pos > 0 && !(log_attrs[new_pos].is_word_start || ++ (log_attrs[new_pos].is_word_end && allow_whitespace))) ++ new_pos--; ++ ++ g_free (log_attrs); ++ } ++ ++ return new_pos; ++} ++ ++static void ++gtk_entry_delete_whitespace (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ PangoLayout *layout = gtk_entry_ensure_layout (entry, FALSE); ++ PangoLogAttr *log_attrs; ++ gint n_attrs; ++ gint start, end; ++ ++ pango_layout_get_log_attrs (layout, &log_attrs, &n_attrs); ++ ++ start = end = priv->current_pos; ++ ++ while (start > 0 && log_attrs[start-1].is_white) ++ start--; ++ ++ while (end < n_attrs && log_attrs[end].is_white) ++ end++; ++ ++ g_free (log_attrs); ++ ++ if (start != end) ++ gtk_editable_delete_text (GTK_EDITABLE (entry), start, end); ++} ++ ++ ++static void ++gtk_entry_select_word (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gint start_pos = gtk_entry_move_backward_word (entry, priv->current_pos, TRUE); ++ gint end_pos = gtk_entry_move_forward_word (entry, priv->current_pos, TRUE); ++ ++ gtk_editable_select_region (GTK_EDITABLE (entry), start_pos, end_pos); ++} ++ ++static void ++gtk_entry_select_line (GtkEntry *entry) ++{ ++ gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); ++} ++ ++static gint ++truncate_multiline (const gchar *text) ++{ ++ gint length; ++ ++ for (length = 0; ++ text[length] && text[length] != '\n' && text[length] != '\r'; ++ length++); ++ ++ return length; ++} ++ ++static void ++paste_received (GtkClipboard *clipboard, ++ const gchar *text, ++ gpointer data) ++{ ++ GtkEntry *entry = GTK_ENTRY (data); ++ GtkEditable *editable = GTK_EDITABLE (entry); ++ GtkEntryPrivate *priv = entry->priv; ++ guint button; ++ ++ button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (priv->multipress_gesture)); ++ ++ if (button == GDK_BUTTON_MIDDLE) ++ { ++ gint pos, start, end; ++ pos = priv->insert_pos; ++ gtk_editable_get_selection_bounds (editable, &start, &end); ++ if (!((start <= pos && pos <= end) || (end <= pos && pos <= start))) ++ gtk_editable_select_region (editable, pos, pos); ++ } ++ ++ if (text) ++ { ++ gint pos, start, end; ++ gint length = -1; ++ gboolean popup_completion; ++ GtkEntryCompletion *completion; ++ ++ completion = gtk_entry_get_completion (entry); ++ ++ if (priv->truncate_multiline) ++ length = truncate_multiline (text); ++ ++ /* only complete if the selection is at the end */ ++ popup_completion = (gtk_entry_buffer_get_length (get_buffer (entry)) == ++ MAX (priv->current_pos, priv->selection_bound)); ++ ++ if (completion) ++ { ++ if (gtk_widget_get_mapped (completion->priv->popup_window)) ++ _gtk_entry_completion_popdown (completion); ++ ++ if (!popup_completion && completion->priv->changed_id > 0) ++ g_signal_handler_block (entry, completion->priv->changed_id); ++ } ++ ++ begin_change (entry); ++ if (gtk_editable_get_selection_bounds (editable, &start, &end)) ++ gtk_editable_delete_text (editable, start, end); ++ ++ pos = priv->current_pos; ++ gtk_editable_insert_text (editable, text, length, &pos); ++ gtk_editable_set_position (editable, pos); ++ end_change (entry); ++ ++ if (completion && ++ !popup_completion && completion->priv->changed_id > 0) ++ g_signal_handler_unblock (entry, completion->priv->changed_id); ++ } ++ ++ g_object_unref (entry); ++} ++ ++static void ++gtk_entry_paste (GtkEntry *entry, ++ GdkAtom selection) ++{ ++ g_object_ref (entry); ++ gtk_clipboard_request_text (gtk_widget_get_clipboard (GTK_WIDGET (entry), selection), ++ paste_received, entry); ++} ++ ++static void ++primary_get_cb (GtkClipboard *clipboard, ++ GtkSelectionData *selection_data, ++ guint info, ++ gpointer data) ++{ ++ GtkEntry *entry = GTK_ENTRY (data); ++ gint start, end; ++ ++ if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end)) ++ { ++ gchar *str = _gtk_entry_get_display_text (entry, start, end); ++ gtk_selection_data_set_text (selection_data, str, -1); ++ g_free (str); ++ } ++} ++ ++static void ++primary_clear_cb (GtkClipboard *clipboard, ++ gpointer data) ++{ ++ GtkEntry *entry = GTK_ENTRY (data); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ gtk_editable_select_region (GTK_EDITABLE (entry), priv->current_pos, priv->current_pos); ++} ++ ++static void ++gtk_entry_update_primary_selection (GtkEntry *entry) ++{ ++ GtkTargetList *list; ++ GtkTargetEntry *targets; ++ GtkClipboard *clipboard; ++ gint start, end; ++ gint n_targets; ++ ++ if (!gtk_widget_get_realized (GTK_WIDGET (entry))) ++ return; ++ ++ list = gtk_target_list_new (NULL, 0); ++ gtk_target_list_add_text_targets (list, 0); ++ ++ targets = gtk_target_table_new_from_list (list, &n_targets); ++ ++ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (entry), GDK_SELECTION_PRIMARY); ++ ++ if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end)) ++ { ++ gtk_clipboard_set_with_owner (clipboard, targets, n_targets, ++ primary_get_cb, primary_clear_cb, G_OBJECT (entry)); ++ } ++ else ++ { ++ if (gtk_clipboard_get_owner (clipboard) == G_OBJECT (entry)) ++ gtk_clipboard_clear (clipboard); ++ } ++ ++ gtk_target_table_free (targets, n_targets); ++ gtk_target_list_unref (list); ++} ++ ++static void ++gtk_entry_clear_icon (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ EntryIconInfo *icon_info = priv->icons[icon_pos]; ++ GtkIconHelper *icon_helper; ++ GtkImageType storage_type; ++ ++ if (icon_info == NULL) ++ return; ++ ++ icon_helper = GTK_ICON_HELPER (icon_info->gadget); ++ if (_gtk_icon_helper_get_is_empty (icon_helper)) ++ return; ++ ++ g_object_freeze_notify (G_OBJECT (entry)); ++ ++ /* Explicitly check, as the pointer may become invalidated ++ * during destruction. ++ */ ++ if (GDK_IS_WINDOW (icon_info->window)) ++ gdk_window_hide (icon_info->window); ++ ++ storage_type = _gtk_icon_helper_get_storage_type (icon_helper); ++ ++ switch (storage_type) ++ { ++ case GTK_IMAGE_PIXBUF: ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_PIXBUF_PRIMARY ++ : PROP_PIXBUF_SECONDARY]); ++ break; ++ ++ case GTK_IMAGE_STOCK: ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_STOCK_PRIMARY ++ : PROP_STOCK_SECONDARY]); ++ break; ++ ++ case GTK_IMAGE_ICON_NAME: ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_ICON_NAME_PRIMARY ++ : PROP_ICON_NAME_SECONDARY]); ++ break; ++ ++ case GTK_IMAGE_GICON: ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_GICON_PRIMARY ++ : PROP_GICON_SECONDARY]); ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ break; ++ } ++ ++ _gtk_icon_helper_clear (icon_helper); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_STORAGE_TYPE_PRIMARY ++ : PROP_STORAGE_TYPE_SECONDARY]); ++ ++ g_object_thaw_notify (G_OBJECT (entry)); ++} ++ ++/* Public API ++ */ ++ ++/** ++ * gtk_entry_new: ++ * ++ * Creates a new entry. ++ * ++ * Returns: a new #GtkEntry. ++ */ ++GtkWidget* ++gtk_entry_new (void) ++{ ++ return g_object_new (GTK_TYPE_ENTRY, NULL); ++} ++ ++/** ++ * gtk_entry_new_with_buffer: ++ * @buffer: The buffer to use for the new #GtkEntry. ++ * ++ * Creates a new entry with the specified text buffer. ++ * ++ * Returns: a new #GtkEntry ++ * ++ * Since: 2.18 ++ */ ++GtkWidget* ++gtk_entry_new_with_buffer (GtkEntryBuffer *buffer) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY_BUFFER (buffer), NULL); ++ return g_object_new (GTK_TYPE_ENTRY, "buffer", buffer, NULL); ++} ++ ++static GtkEntryBuffer* ++get_buffer (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->buffer == NULL) ++ { ++ GtkEntryBuffer *buffer; ++ buffer = gtk_entry_buffer_new (NULL, 0); ++ gtk_entry_set_buffer (entry, buffer); ++ g_object_unref (buffer); ++ } ++ ++ return priv->buffer; ++} ++ ++/** ++ * gtk_entry_get_buffer: ++ * @entry: a #GtkEntry ++ * ++ * Get the #GtkEntryBuffer object which holds the text for ++ * this widget. ++ * ++ * Since: 2.18 ++ * ++ * Returns: (transfer none): A #GtkEntryBuffer object. ++ */ ++GtkEntryBuffer* ++gtk_entry_get_buffer (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ return get_buffer (entry); ++} ++ ++/** ++ * gtk_entry_set_buffer: ++ * @entry: a #GtkEntry ++ * @buffer: a #GtkEntryBuffer ++ * ++ * Set the #GtkEntryBuffer object which holds the text for ++ * this widget. ++ * ++ * Since: 2.18 ++ */ ++void ++gtk_entry_set_buffer (GtkEntry *entry, ++ GtkEntryBuffer *buffer) ++{ ++ GtkEntryPrivate *priv; ++ GObject *obj; ++ gboolean had_buffer = FALSE; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ if (buffer) ++ { ++ g_return_if_fail (GTK_IS_ENTRY_BUFFER (buffer)); ++ g_object_ref (buffer); ++ } ++ ++ if (priv->buffer) ++ { ++ had_buffer = TRUE; ++ buffer_disconnect_signals (entry); ++ g_object_unref (priv->buffer); ++ } ++ ++ priv->buffer = buffer; ++ ++ if (priv->buffer) ++ buffer_connect_signals (entry); ++ ++ obj = G_OBJECT (entry); ++ g_object_freeze_notify (obj); ++ g_object_notify_by_pspec (obj, entry_props[PROP_BUFFER]); ++ g_object_notify_by_pspec (obj, entry_props[PROP_TEXT]); ++ g_object_notify_by_pspec (obj, entry_props[PROP_TEXT_LENGTH]); ++ g_object_notify_by_pspec (obj, entry_props[PROP_MAX_LENGTH]); ++ g_object_notify_by_pspec (obj, entry_props[PROP_VISIBILITY]); ++ g_object_notify_by_pspec (obj, entry_props[PROP_INVISIBLE_CHAR]); ++ g_object_notify_by_pspec (obj, entry_props[PROP_INVISIBLE_CHAR_SET]); ++ g_object_thaw_notify (obj); ++ ++ if (had_buffer) ++ { ++ gtk_editable_set_position (GTK_EDITABLE (entry), 0); ++ gtk_entry_recompute (entry); ++ } ++} ++ ++/** ++ * gtk_entry_get_text_area: ++ * @entry: a #GtkEntry ++ * @text_area: (out): Return location for the text area. ++ * ++ * Gets the area where the entry’s text is drawn. This function is ++ * useful when drawing something to the entry in a draw callback. ++ * ++ * If the entry is not realized, @text_area is filled with zeros. ++ * ++ * See also gtk_entry_get_icon_area(). ++ * ++ * Since: 3.0 ++ **/ ++void ++gtk_entry_get_text_area (GtkEntry *entry, ++ GdkRectangle *text_area) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (text_area != NULL); ++ ++ priv = entry->priv; ++ ++ if (gtk_widget_get_realized (GTK_WIDGET (entry))) ++ { ++ GtkAllocation allocation; ++ ++ *text_area = priv->text_allocation; ++ ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ text_area->x -= allocation.x; ++ text_area->y -= allocation.y; ++ } ++ else ++ { ++ text_area->x = 0; ++ text_area->y = 0; ++ text_area->width = 0; ++ text_area->height = 0; ++ } ++} ++ ++/** ++ * gtk_entry_set_text: ++ * @entry: a #GtkEntry ++ * @text: the new text ++ * ++ * Sets the text in the widget to the given ++ * value, replacing the current contents. ++ * ++ * See gtk_entry_buffer_set_text(). ++ */ ++void ++gtk_entry_set_text (GtkEntry *entry, ++ const gchar *text) ++{ ++ gint tmp_pos; ++ GtkEntryCompletion *completion; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (text != NULL); ++ ++ /* Actually setting the text will affect the cursor and selection; ++ * if the contents don't actually change, this will look odd to the user. ++ */ ++ if (strcmp (gtk_entry_buffer_get_text (get_buffer (entry)), text) == 0) ++ return; ++ ++ completion = gtk_entry_get_completion (entry); ++ if (completion && completion->priv->changed_id > 0) ++ g_signal_handler_block (entry, completion->priv->changed_id); ++ ++ begin_change (entry); ++ gtk_editable_delete_text (GTK_EDITABLE (entry), 0, -1); ++ tmp_pos = 0; ++ gtk_editable_insert_text (GTK_EDITABLE (entry), text, strlen (text), &tmp_pos); ++ end_change (entry); ++ ++ if (completion && completion->priv->changed_id > 0) ++ g_signal_handler_unblock (entry, completion->priv->changed_id); ++} ++ ++/** ++ * gtk_entry_set_visibility: ++ * @entry: a #GtkEntry ++ * @visible: %TRUE if the contents of the entry are displayed ++ * as plaintext ++ * ++ * Sets whether the contents of the entry are visible or not. ++ * When visibility is set to %FALSE, characters are displayed ++ * as the invisible char, and will also appear that way when ++ * the text in the entry widget is copied elsewhere. ++ * ++ * By default, GTK+ picks the best invisible character available ++ * in the current font, but it can be changed with ++ * gtk_entry_set_invisible_char(). ++ * ++ * Note that you probably want to set #GtkEntry:input-purpose ++ * to %GTK_INPUT_PURPOSE_PASSWORD or %GTK_INPUT_PURPOSE_PIN to ++ * inform input methods about the purpose of this entry, ++ * in addition to setting visibility to %FALSE. ++ */ ++void ++gtk_entry_set_visibility (GtkEntry *entry, ++ gboolean visible) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ visible = visible != FALSE; ++ ++ if (priv->visible != visible) ++ { ++ priv->visible = visible; ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_VISIBILITY]); ++ gtk_entry_recompute (entry); ++ } ++} ++ ++/** ++ * gtk_entry_get_visibility: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves whether the text in @entry is visible. See ++ * gtk_entry_set_visibility(). ++ * ++ * Returns: %TRUE if the text is currently visible ++ **/ ++gboolean ++gtk_entry_get_visibility (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); ++ ++ return entry->priv->visible; ++} ++ ++/** ++ * gtk_entry_set_invisible_char: ++ * @entry: a #GtkEntry ++ * @ch: a Unicode character ++ * ++ * Sets the character to use in place of the actual text when ++ * gtk_entry_set_visibility() has been called to set text visibility ++ * to %FALSE. i.e. this is the character used in “password mode” to ++ * show the user how many characters have been typed. By default, GTK+ ++ * picks the best invisible char available in the current font. If you ++ * set the invisible char to 0, then the user will get no feedback ++ * at all; there will be no text on the screen as they type. ++ **/ ++void ++gtk_entry_set_invisible_char (GtkEntry *entry, ++ gunichar ch) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ if (!priv->invisible_char_set) ++ { ++ priv->invisible_char_set = TRUE; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INVISIBLE_CHAR_SET]); ++ } ++ ++ if (ch == priv->invisible_char) ++ return; ++ ++ priv->invisible_char = ch; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INVISIBLE_CHAR]); ++ gtk_entry_recompute (entry); ++} ++ ++/** ++ * gtk_entry_get_invisible_char: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the character displayed in place of the real characters ++ * for entries with visibility set to false. See gtk_entry_set_invisible_char(). ++ * ++ * Returns: the current invisible char, or 0, if the entry does not ++ * show invisible text at all. ++ **/ ++gunichar ++gtk_entry_get_invisible_char (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); ++ ++ return entry->priv->invisible_char; ++} ++ ++/** ++ * gtk_entry_unset_invisible_char: ++ * @entry: a #GtkEntry ++ * ++ * Unsets the invisible char previously set with ++ * gtk_entry_set_invisible_char(). So that the ++ * default invisible char is used again. ++ * ++ * Since: 2.16 ++ **/ ++void ++gtk_entry_unset_invisible_char (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv; ++ gunichar ch; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ if (!priv->invisible_char_set) ++ return; ++ ++ priv->invisible_char_set = FALSE; ++ ch = find_invisible_char (GTK_WIDGET (entry)); ++ ++ if (priv->invisible_char != ch) ++ { ++ priv->invisible_char = ch; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INVISIBLE_CHAR]); ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INVISIBLE_CHAR_SET]); ++ gtk_entry_recompute (entry); ++} ++ ++/** ++ * gtk_entry_set_overwrite_mode: ++ * @entry: a #GtkEntry ++ * @overwrite: new value ++ * ++ * Sets whether the text is overwritten when typing in the #GtkEntry. ++ * ++ * Since: 2.14 ++ **/ ++void ++gtk_entry_set_overwrite_mode (GtkEntry *entry, ++ gboolean overwrite) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ if (priv->overwrite_mode == overwrite) ++ return; ++ ++ gtk_entry_toggle_overwrite (entry); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_OVERWRITE_MODE]); ++} ++ ++/** ++ * gtk_entry_get_overwrite_mode: ++ * @entry: a #GtkEntry ++ * ++ * Gets the value set by gtk_entry_set_overwrite_mode(). ++ * ++ * Returns: whether the text is overwritten when typing. ++ * ++ * Since: 2.14 ++ **/ ++gboolean ++gtk_entry_get_overwrite_mode (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); ++ ++ return entry->priv->overwrite_mode; ++} ++ ++/** ++ * gtk_entry_get_text: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the contents of the entry widget. ++ * See also gtk_editable_get_chars(). ++ * ++ * This is equivalent to getting @entry's #GtkEntryBuffer and calling ++ * gtk_entry_buffer_get_text() on it. ++ * ++ * Returns: a pointer to the contents of the widget as a ++ * string. This string points to internally allocated ++ * storage in the widget and must not be freed, modified or ++ * stored. ++ **/ ++const gchar* ++gtk_entry_get_text (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ return gtk_entry_buffer_get_text (get_buffer (entry)); ++} ++ ++/** ++ * gtk_entry_set_max_length: ++ * @entry: a #GtkEntry ++ * @max: the maximum length of the entry, or 0 for no maximum. ++ * (other than the maximum length of entries.) The value passed in will ++ * be clamped to the range 0-65536. ++ * ++ * Sets the maximum allowed length of the contents of the widget. If ++ * the current contents are longer than the given length, then they ++ * will be truncated to fit. ++ * ++ * This is equivalent to getting @entry's #GtkEntryBuffer and ++ * calling gtk_entry_buffer_set_max_length() on it. ++ * ]| ++ **/ ++void ++gtk_entry_set_max_length (GtkEntry *entry, ++ gint max) ++{ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ gtk_entry_buffer_set_max_length (get_buffer (entry), max); ++} ++ ++/** ++ * gtk_entry_get_max_length: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the maximum allowed length of the text in ++ * @entry. See gtk_entry_set_max_length(). ++ * ++ * This is equivalent to getting @entry's #GtkEntryBuffer and ++ * calling gtk_entry_buffer_get_max_length() on it. ++ * ++ * Returns: the maximum allowed number of characters ++ * in #GtkEntry, or 0 if there is no maximum. ++ **/ ++gint ++gtk_entry_get_max_length (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); ++ ++ return gtk_entry_buffer_get_max_length (get_buffer (entry)); ++} ++ ++/** ++ * gtk_entry_get_text_length: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the current length of the text in ++ * @entry. ++ * ++ * This is equivalent to getting @entry's #GtkEntryBuffer and ++ * calling gtk_entry_buffer_get_length() on it. ++ ++ * ++ * Returns: the current number of characters ++ * in #GtkEntry, or 0 if there are none. ++ * ++ * Since: 2.14 ++ **/ ++guint16 ++gtk_entry_get_text_length (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); ++ ++ return gtk_entry_buffer_get_length (get_buffer (entry)); ++} ++ ++/** ++ * gtk_entry_set_activates_default: ++ * @entry: a #GtkEntry ++ * @setting: %TRUE to activate window’s default widget on Enter keypress ++ * ++ * If @setting is %TRUE, pressing Enter in the @entry will activate the default ++ * widget for the window containing the entry. This usually means that ++ * the dialog box containing the entry will be closed, since the default ++ * widget is usually one of the dialog buttons. ++ * ++ * (For experts: if @setting is %TRUE, the entry calls ++ * gtk_window_activate_default() on the window containing the entry, in ++ * the default handler for the #GtkEntry::activate signal.) ++ **/ ++void ++gtk_entry_set_activates_default (GtkEntry *entry, ++ gboolean setting) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ setting = setting != FALSE; ++ ++ if (setting != priv->activates_default) ++ { ++ priv->activates_default = setting; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ACTIVATES_DEFAULT]); ++ } ++} ++ ++/** ++ * gtk_entry_get_activates_default: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the value set by gtk_entry_set_activates_default(). ++ * ++ * Returns: %TRUE if the entry will activate the default widget ++ */ ++gboolean ++gtk_entry_get_activates_default (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); ++ ++ return entry->priv->activates_default; ++} ++ ++/** ++ * gtk_entry_set_width_chars: ++ * @entry: a #GtkEntry ++ * @n_chars: width in chars ++ * ++ * Changes the size request of the entry to be about the right size ++ * for @n_chars characters. Note that it changes the size ++ * request, the size can still be affected by ++ * how you pack the widget into containers. If @n_chars is -1, the ++ * size reverts to the default entry size. ++ **/ ++void ++gtk_entry_set_width_chars (GtkEntry *entry, ++ gint n_chars) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ if (priv->width_chars != n_chars) ++ { ++ priv->width_chars = n_chars; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_WIDTH_CHARS]); ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++ } ++} ++ ++/** ++ * gtk_entry_get_width_chars: ++ * @entry: a #GtkEntry ++ * ++ * Gets the value set by gtk_entry_set_width_chars(). ++ * ++ * Returns: number of chars to request space for, or negative if unset ++ **/ ++gint ++gtk_entry_get_width_chars (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); ++ ++ return entry->priv->width_chars; ++} ++ ++/** ++ * gtk_entry_set_max_width_chars: ++ * @entry: a #GtkEntry ++ * @n_chars: the new desired maximum width, in characters ++ * ++ * Sets the desired maximum width in characters of @entry. ++ * ++ * Since: 3.12 ++ */ ++void ++gtk_entry_set_max_width_chars (GtkEntry *entry, ++ gint n_chars) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ if (priv->max_width_chars != n_chars) ++ { ++ priv->max_width_chars = n_chars; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_MAX_WIDTH_CHARS]); ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++ } ++} ++ ++/** ++ * gtk_entry_get_max_width_chars: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the desired maximum width of @entry, in characters. ++ * See gtk_entry_set_max_width_chars(). ++ * ++ * Returns: the maximum width of the entry, in characters ++ * ++ * Since: 3.12 ++ */ ++gint ++gtk_entry_get_max_width_chars (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); ++ ++ return entry->priv->max_width_chars; ++} ++ ++/** ++ * gtk_entry_set_has_frame: ++ * @entry: a #GtkEntry ++ * @setting: new value ++ * ++ * Sets whether the entry has a beveled frame around it. ++ **/ ++void ++gtk_entry_set_has_frame (GtkEntry *entry, ++ gboolean setting) ++{ ++ GtkStyleContext *context; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ setting = (setting != FALSE); ++ ++ if (setting == gtk_entry_get_has_frame (entry)) ++ return; ++ ++ context = gtk_widget_get_style_context (GTK_WIDGET (entry)); ++ if (setting) ++ gtk_style_context_remove_class (context, GTK_STYLE_CLASS_FLAT); ++ else ++ gtk_style_context_add_class (context, GTK_STYLE_CLASS_FLAT); ++ gtk_widget_queue_draw (GTK_WIDGET (entry)); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_HAS_FRAME]); ++} ++ ++/** ++ * gtk_entry_get_has_frame: ++ * @entry: a #GtkEntry ++ * ++ * Gets the value set by gtk_entry_set_has_frame(). ++ * ++ * Returns: whether the entry has a beveled frame ++ **/ ++gboolean ++gtk_entry_get_has_frame (GtkEntry *entry) ++{ ++ GtkStyleContext *context; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); ++ ++ context = gtk_widget_get_style_context (GTK_WIDGET (entry)); ++ ++ return !gtk_style_context_has_class (context, GTK_STYLE_CLASS_FLAT); ++} ++ ++/** ++ * gtk_entry_set_inner_border: ++ * @entry: a #GtkEntry ++ * @border: (allow-none): a #GtkBorder, or %NULL ++ * ++ * Sets %entry’s inner-border property to @border, or clears it if %NULL ++ * is passed. The inner-border is the area around the entry’s text, but ++ * inside its frame. ++ * ++ * If set, this property overrides the inner-border style property. ++ * Overriding the style-provided border is useful when you want to do ++ * in-place editing of some text in a canvas or list widget, where ++ * pixel-exact positioning of the entry is important. ++ * ++ * Since: 2.10 ++ * ++ * Deprecated: 3.4: Use the standard border and padding CSS properties (through ++ * objects like #GtkStyleContext and #GtkCssProvider); the value set with ++ * this function is ignored by #GtkEntry. ++ **/ ++void ++gtk_entry_set_inner_border (GtkEntry *entry, ++ const GtkBorder *border) ++{ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ gtk_entry_do_set_inner_border (entry, border); ++} ++ ++/** ++ * gtk_entry_get_inner_border: ++ * @entry: a #GtkEntry ++ * ++ * This function returns the entry’s #GtkEntry:inner-border property. See ++ * gtk_entry_set_inner_border() for more information. ++ * ++ * Returns: (nullable) (transfer none): the entry’s #GtkBorder, or ++ * %NULL if none was set. ++ * ++ * Since: 2.10 ++ * ++ * Deprecated: 3.4: Use the standard border and padding CSS properties (through ++ * objects like #GtkStyleContext and #GtkCssProvider); the value returned by ++ * this function is ignored by #GtkEntry. ++ **/ ++const GtkBorder * ++gtk_entry_get_inner_border (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ return gtk_entry_do_get_inner_border (entry); ++} ++ ++/** ++ * gtk_entry_get_layout: ++ * @entry: a #GtkEntry ++ * ++ * Gets the #PangoLayout used to display the entry. ++ * The layout is useful to e.g. convert text positions to ++ * pixel positions, in combination with gtk_entry_get_layout_offsets(). ++ * The returned layout is owned by the entry and must not be ++ * modified or freed by the caller. ++ * ++ * Keep in mind that the layout text may contain a preedit string, so ++ * gtk_entry_layout_index_to_text_index() and ++ * gtk_entry_text_index_to_layout_index() are needed to convert byte ++ * indices in the layout to byte indices in the entry contents. ++ * ++ * Returns: (transfer none): the #PangoLayout for this entry ++ **/ ++PangoLayout* ++gtk_entry_get_layout (GtkEntry *entry) ++{ ++ PangoLayout *layout; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ ++ return layout; ++} ++ ++ ++/** ++ * gtk_entry_layout_index_to_text_index: ++ * @entry: a #GtkEntry ++ * @layout_index: byte index into the entry layout text ++ * ++ * Converts from a position in the entry’s #PangoLayout (returned by ++ * gtk_entry_get_layout()) to a position in the entry contents ++ * (returned by gtk_entry_get_text()). ++ * ++ * Returns: byte index into the entry contents ++ **/ ++gint ++gtk_entry_layout_index_to_text_index (GtkEntry *entry, ++ gint layout_index) ++{ ++ GtkEntryPrivate *priv; ++ PangoLayout *layout; ++ const gchar *text; ++ gint cursor_index; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); ++ ++ priv = entry->priv; ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ text = pango_layout_get_text (layout); ++ cursor_index = g_utf8_offset_to_pointer (text, priv->current_pos) - text; ++ ++ if (layout_index >= cursor_index && priv->preedit_length) ++ { ++ if (layout_index >= cursor_index + priv->preedit_length) ++ layout_index -= priv->preedit_length; ++ else ++ layout_index = cursor_index; ++ } ++ ++ return layout_index; ++} ++ ++/** ++ * gtk_entry_text_index_to_layout_index: ++ * @entry: a #GtkEntry ++ * @text_index: byte index into the entry contents ++ * ++ * Converts from a position in the entry contents (returned ++ * by gtk_entry_get_text()) to a position in the ++ * entry’s #PangoLayout (returned by gtk_entry_get_layout(), ++ * with text retrieved via pango_layout_get_text()). ++ * ++ * Returns: byte index into the entry layout text ++ **/ ++gint ++gtk_entry_text_index_to_layout_index (GtkEntry *entry, ++ gint text_index) ++{ ++ GtkEntryPrivate *priv; ++ PangoLayout *layout; ++ const gchar *text; ++ gint cursor_index; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0); ++ ++ priv = entry->priv; ++ ++ layout = gtk_entry_ensure_layout (entry, TRUE); ++ text = pango_layout_get_text (layout); ++ cursor_index = g_utf8_offset_to_pointer (text, priv->current_pos) - text; ++ ++ if (text_index > cursor_index) ++ text_index += priv->preedit_length; ++ ++ return text_index; ++} ++ ++/** ++ * gtk_entry_get_layout_offsets: ++ * @entry: a #GtkEntry ++ * @x: (out) (allow-none): location to store X offset of layout, or %NULL ++ * @y: (out) (allow-none): location to store Y offset of layout, or %NULL ++ * ++ * ++ * Obtains the position of the #PangoLayout used to render text ++ * in the entry, in widget coordinates. Useful if you want to line ++ * up the text in an entry with some other text, e.g. when using the ++ * entry to implement editable cells in a sheet widget. ++ * ++ * Also useful to convert mouse events into coordinates inside the ++ * #PangoLayout, e.g. to take some action if some part of the entry text ++ * is clicked. ++ * ++ * Note that as the user scrolls around in the entry the offsets will ++ * change; you’ll need to connect to the “notify::scroll-offset” ++ * signal to track this. Remember when using the #PangoLayout ++ * functions you need to convert to and from pixels using ++ * PANGO_PIXELS() or #PANGO_SCALE. ++ * ++ * Keep in mind that the layout text may contain a preedit string, so ++ * gtk_entry_layout_index_to_text_index() and ++ * gtk_entry_text_index_to_layout_index() are needed to convert byte ++ * indices in the layout to byte indices in the entry contents. ++ **/ ++void ++gtk_entry_get_layout_offsets (GtkEntry *entry, ++ gint *x, ++ gint *y) ++{ ++ GtkEntryPrivate *priv; ++ GtkAllocation allocation; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ ++ /* this gets coords relative to text area */ ++ get_layout_position (entry, x, y); ++ ++ /* convert to widget coords */ ++ if (x) ++ *x += priv->text_allocation.x - allocation.x; ++ ++ if (y) ++ *y += priv->text_allocation.y - allocation.y; ++} ++ ++ ++/** ++ * gtk_entry_set_alignment: ++ * @entry: a #GtkEntry ++ * @xalign: The horizontal alignment, from 0 (left) to 1 (right). ++ * Reversed for RTL layouts ++ * ++ * Sets the alignment for the contents of the entry. This controls ++ * the horizontal positioning of the contents when the displayed ++ * text is shorter than the width of the entry. ++ * ++ * Since: 2.4 ++ **/ ++void ++gtk_entry_set_alignment (GtkEntry *entry, gfloat xalign) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ if (xalign < 0.0) ++ xalign = 0.0; ++ else if (xalign > 1.0) ++ xalign = 1.0; ++ ++ if (xalign != priv->xalign) ++ { ++ priv->xalign = xalign; ++ gtk_entry_recompute (entry); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_XALIGN]); ++ } ++} ++ ++/** ++ * gtk_entry_get_alignment: ++ * @entry: a #GtkEntry ++ * ++ * Gets the value set by gtk_entry_set_alignment(). ++ * ++ * Returns: the alignment ++ * ++ * Since: 2.4 ++ **/ ++gfloat ++gtk_entry_get_alignment (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0.0); ++ ++ return entry->priv->xalign; ++} ++ ++/** ++ * gtk_entry_set_icon_from_pixbuf: ++ * @entry: a #GtkEntry ++ * @icon_pos: Icon position ++ * @pixbuf: (allow-none): A #GdkPixbuf, or %NULL ++ * ++ * Sets the icon shown in the specified position using a pixbuf. ++ * ++ * If @pixbuf is %NULL, no icon will be shown in the specified position. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_from_pixbuf (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ GdkPixbuf *pixbuf) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ g_object_freeze_notify (G_OBJECT (entry)); ++ ++ if (pixbuf) ++ g_object_ref (pixbuf); ++ ++ if (pixbuf) ++ { ++ _gtk_icon_helper_set_pixbuf (GTK_ICON_HELPER (icon_info->gadget), pixbuf); ++ _gtk_icon_helper_set_icon_size (GTK_ICON_HELPER (icon_info->gadget), ++ GTK_ICON_SIZE_MENU); ++ ++ if (icon_pos == GTK_ENTRY_ICON_PRIMARY) ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_PIXBUF_PRIMARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_PRIMARY]); ++ } ++ else ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_PIXBUF_SECONDARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_SECONDARY]); ++ } ++ ++ if (gtk_widget_get_mapped (GTK_WIDGET (entry))) ++ gdk_window_show_unraised (icon_info->window); ++ ++ g_object_unref (pixbuf); ++ } ++ else ++ gtk_entry_clear_icon (entry, icon_pos); ++ ++ if (gtk_widget_get_visible (GTK_WIDGET (entry))) ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++ ++ g_object_thaw_notify (G_OBJECT (entry)); ++} ++ ++/** ++ * gtk_entry_set_icon_from_stock: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * @stock_id: (allow-none): The name of the stock item, or %NULL ++ * ++ * Sets the icon shown in the entry at the specified position from ++ * a stock image. ++ * ++ * If @stock_id is %NULL, no icon will be shown in the specified position. ++ * ++ * Since: 2.16 ++ * ++ * Deprecated: 3.10: Use gtk_entry_set_icon_from_icon_name() instead. ++ */ ++void ++gtk_entry_set_icon_from_stock (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ const gchar *stock_id) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ g_object_freeze_notify (G_OBJECT (entry)); ++ ++ if (stock_id != NULL) ++ { ++ _gtk_icon_helper_set_stock_id (GTK_ICON_HELPER (icon_info->gadget), stock_id, GTK_ICON_SIZE_MENU); ++ ++ if (icon_pos == GTK_ENTRY_ICON_PRIMARY) ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STOCK_PRIMARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_PRIMARY]); ++ } ++ else ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STOCK_SECONDARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_SECONDARY]); ++ } ++ ++ if (gtk_widget_get_mapped (GTK_WIDGET (entry))) ++ gdk_window_show_unraised (icon_info->window); ++ } ++ else ++ gtk_entry_clear_icon (entry, icon_pos); ++ ++ if (gtk_widget_get_visible (GTK_WIDGET (entry))) ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++ ++ g_object_thaw_notify (G_OBJECT (entry)); ++} ++ ++/** ++ * gtk_entry_set_icon_from_icon_name: ++ * @entry: A #GtkEntry ++ * @icon_pos: The position at which to set the icon ++ * @icon_name: (allow-none): An icon name, or %NULL ++ * ++ * Sets the icon shown in the entry at the specified position ++ * from the current icon theme. ++ * ++ * If the icon name isn’t known, a “broken image” icon will be displayed ++ * instead. ++ * ++ * If @icon_name is %NULL, no icon will be shown in the specified position. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_from_icon_name (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ const gchar *icon_name) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ g_object_freeze_notify (G_OBJECT (entry)); ++ ++ ++ if (icon_name != NULL) ++ { ++ _gtk_icon_helper_set_icon_name (GTK_ICON_HELPER (icon_info->gadget), icon_name, GTK_ICON_SIZE_MENU); ++ ++ if (icon_pos == GTK_ENTRY_ICON_PRIMARY) ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ICON_NAME_PRIMARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_PRIMARY]); ++ } ++ else ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ICON_NAME_SECONDARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_SECONDARY]); ++ } ++ ++ if (gtk_widget_get_mapped (GTK_WIDGET (entry))) ++ gdk_window_show_unraised (icon_info->window); ++ } ++ else ++ gtk_entry_clear_icon (entry, icon_pos); ++ ++ if (gtk_widget_get_visible (GTK_WIDGET (entry))) ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++ ++ g_object_thaw_notify (G_OBJECT (entry)); ++} ++ ++/** ++ * gtk_entry_set_icon_from_gicon: ++ * @entry: A #GtkEntry ++ * @icon_pos: The position at which to set the icon ++ * @icon: (allow-none): The icon to set, or %NULL ++ * ++ * Sets the icon shown in the entry at the specified position ++ * from the current icon theme. ++ * If the icon isn’t known, a “broken image” icon will be displayed ++ * instead. ++ * ++ * If @icon is %NULL, no icon will be shown in the specified position. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_from_gicon (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ GIcon *icon) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ g_object_freeze_notify (G_OBJECT (entry)); ++ ++ if (icon) ++ { ++ _gtk_icon_helper_set_gicon (GTK_ICON_HELPER (icon_info->gadget), icon, GTK_ICON_SIZE_MENU); ++ ++ if (icon_pos == GTK_ENTRY_ICON_PRIMARY) ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_GICON_PRIMARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_PRIMARY]); ++ } ++ else ++ { ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_GICON_SECONDARY]); ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_SECONDARY]); ++ } ++ ++ if (gtk_widget_get_mapped (GTK_WIDGET (entry))) ++ gdk_window_show_unraised (icon_info->window); ++ } ++ else ++ gtk_entry_clear_icon (entry, icon_pos); ++ ++ if (gtk_widget_get_visible (GTK_WIDGET (entry))) ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++ ++ g_object_thaw_notify (G_OBJECT (entry)); ++} ++ ++/** ++ * gtk_entry_set_icon_activatable: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * @activatable: %TRUE if the icon should be activatable ++ * ++ * Sets whether the icon is activatable. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_activatable (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ gboolean activatable) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ activatable = activatable != FALSE; ++ ++ if (icon_info->nonactivatable != !activatable) ++ { ++ icon_info->nonactivatable = !activatable; ++ ++ if (gtk_widget_get_realized (GTK_WIDGET (entry))) ++ update_cursors (GTK_WIDGET (entry)); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_ACTIVATABLE_PRIMARY ++ : PROP_ACTIVATABLE_SECONDARY]); ++ } ++} ++ ++/** ++ * gtk_entry_get_icon_activatable: ++ * @entry: a #GtkEntry ++ * @icon_pos: Icon position ++ * ++ * Returns whether the icon is activatable. ++ * ++ * Returns: %TRUE if the icon is activatable. ++ * ++ * Since: 2.16 ++ */ ++gboolean ++gtk_entry_get_icon_activatable (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), FALSE); ++ ++ priv = entry->priv; ++ icon_info = priv->icons[icon_pos]; ++ ++ return (!icon_info || !icon_info->nonactivatable); ++} ++ ++/** ++ * gtk_entry_get_icon_pixbuf: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * ++ * Retrieves the image used for the icon. ++ * ++ * Unlike the other methods of setting and getting icon data, this ++ * method will work regardless of whether the icon was set using a ++ * #GdkPixbuf, a #GIcon, a stock item, or an icon name. ++ * ++ * Returns: (transfer none) (nullable): A #GdkPixbuf, or %NULL if no icon is ++ * set for this position. ++ * ++ * Since: 2.16 ++ */ ++GdkPixbuf * ++gtk_entry_get_icon_pixbuf (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ cairo_surface_t *surface; ++ GdkPixbuf *pixbuf; ++ int width, height; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); ++ ++ priv = entry->priv; ++ ++ icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return NULL; ++ ++ _gtk_icon_helper_get_size (GTK_ICON_HELPER (icon_info->gadget), &width, &height); ++ surface = gtk_icon_helper_load_surface (GTK_ICON_HELPER (icon_info->gadget), 1); ++ ++ pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, width, height); ++ ++ cairo_surface_destroy (surface); ++ ++ /* HACK: unfortunately this is transfer none, so we attach it somehwere ++ * convenient. ++ */ ++ if (pixbuf) ++ { ++ g_object_set_data_full (G_OBJECT (icon_info->gadget), ++ "gtk-entry-pixbuf", ++ pixbuf, ++ g_object_unref); ++ } ++ ++ return pixbuf; ++} ++ ++/** ++ * gtk_entry_get_icon_gicon: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * ++ * Retrieves the #GIcon used for the icon, or %NULL if there is ++ * no icon or if the icon was set by some other method (e.g., by ++ * stock, pixbuf, or icon name). ++ * ++ * Returns: (transfer none) (nullable): A #GIcon, or %NULL if no icon is set ++ * or if the icon is not a #GIcon ++ * ++ * Since: 2.16 ++ */ ++GIcon * ++gtk_entry_get_icon_gicon (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); ++ ++ priv = entry->priv; ++ icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return NULL; ++ ++ return _gtk_icon_helper_peek_gicon (GTK_ICON_HELPER (icon_info->gadget)); ++} ++ ++/** ++ * gtk_entry_get_icon_stock: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * ++ * Retrieves the stock id used for the icon, or %NULL if there is ++ * no icon or if the icon was set by some other method (e.g., by ++ * pixbuf, icon name or gicon). ++ * ++ * Returns: A stock id, or %NULL if no icon is set or if the icon ++ * wasn’t set from a stock id ++ * ++ * Since: 2.16 ++ * ++ * Deprecated: 3.10: Use gtk_entry_get_icon_name() instead. ++ */ ++const gchar * ++gtk_entry_get_icon_stock (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); ++ ++ priv = entry->priv; ++ icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return NULL; ++ ++ return _gtk_icon_helper_get_stock_id (GTK_ICON_HELPER (icon_info->gadget)); ++} ++ ++/** ++ * gtk_entry_get_icon_name: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * ++ * Retrieves the icon name used for the icon, or %NULL if there is ++ * no icon or if the icon was set by some other method (e.g., by ++ * pixbuf, stock or gicon). ++ * ++ * Returns: (nullable): An icon name, or %NULL if no icon is set or if the icon ++ * wasn’t set from an icon name ++ * ++ * Since: 2.16 ++ */ ++const gchar * ++gtk_entry_get_icon_name (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); ++ ++ priv = entry->priv; ++ icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return NULL; ++ ++ return _gtk_icon_helper_get_icon_name (GTK_ICON_HELPER (icon_info->gadget)); ++} ++ ++/** ++ * gtk_entry_set_icon_sensitive: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * @sensitive: Specifies whether the icon should appear ++ * sensitive or insensitive ++ * ++ * Sets the sensitivity for the specified icon. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_sensitive (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ gboolean sensitive) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ if (icon_info->insensitive != !sensitive) ++ { ++ icon_info->insensitive = !sensitive; ++ ++ icon_info->pressed = FALSE; ++ icon_info->prelight = FALSE; ++ ++ if (gtk_widget_get_realized (GTK_WIDGET (entry))) ++ update_cursors (GTK_WIDGET (entry)); ++ ++ update_icon_state (GTK_WIDGET (entry), icon_pos); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_SENSITIVE_PRIMARY ++ : PROP_SENSITIVE_SECONDARY]); ++ } ++} ++ ++/** ++ * gtk_entry_get_icon_sensitive: ++ * @entry: a #GtkEntry ++ * @icon_pos: Icon position ++ * ++ * Returns whether the icon appears sensitive or insensitive. ++ * ++ * Returns: %TRUE if the icon is sensitive. ++ * ++ * Since: 2.16 ++ */ ++gboolean ++gtk_entry_get_icon_sensitive (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), TRUE); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), TRUE); ++ ++ priv = entry->priv; ++ ++ icon_info = priv->icons[icon_pos]; ++ ++ return (!icon_info || !icon_info->insensitive); ++ ++} ++ ++/** ++ * gtk_entry_get_icon_storage_type: ++ * @entry: a #GtkEntry ++ * @icon_pos: Icon position ++ * ++ * Gets the type of representation being used by the icon ++ * to store image data. If the icon has no image data, ++ * the return value will be %GTK_IMAGE_EMPTY. ++ * ++ * Returns: image representation being used ++ * ++ * Since: 2.16 ++ **/ ++GtkImageType ++gtk_entry_get_icon_storage_type (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), GTK_IMAGE_EMPTY); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), GTK_IMAGE_EMPTY); ++ ++ priv = entry->priv; ++ ++ icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return GTK_IMAGE_EMPTY; ++ ++ return _gtk_icon_helper_get_storage_type (GTK_ICON_HELPER (icon_info->gadget)); ++} ++ ++/** ++ * gtk_entry_get_icon_at_pos: ++ * @entry: a #GtkEntry ++ * @x: the x coordinate of the position to find ++ * @y: the y coordinate of the position to find ++ * ++ * Finds the icon at the given position and return its index. The ++ * position’s coordinates are relative to the @entry’s top left corner. ++ * If @x, @y doesn’t lie inside an icon, -1 is returned. ++ * This function is intended for use in a #GtkWidget::query-tooltip ++ * signal handler. ++ * ++ * Returns: the index of the icon at the given position, or -1 ++ * ++ * Since: 2.16 ++ */ ++gint ++gtk_entry_get_icon_at_pos (GtkEntry *entry, ++ gint x, ++ gint y) ++{ ++ GtkEntryPrivate *priv; ++ guint i; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), -1); ++ ++ priv = entry->priv; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info == NULL) ++ continue; ++ ++ if (gtk_css_gadget_border_box_contains_point (icon_info->gadget, x, y)) ++ return i; ++ } ++ ++ return -1; ++} ++ ++/** ++ * gtk_entry_set_icon_drag_source: ++ * @entry: a #GtkEntry ++ * @icon_pos: icon position ++ * @target_list: the targets (data formats) in which the data can be provided ++ * @actions: a bitmask of the allowed drag actions ++ * ++ * Sets up the icon at the given position so that GTK+ will start a drag ++ * operation when the user clicks and drags the icon. ++ * ++ * To handle the drag operation, you need to connect to the usual ++ * #GtkWidget::drag-data-get (or possibly #GtkWidget::drag-data-delete) ++ * signal, and use gtk_entry_get_current_icon_drag_source() in ++ * your signal handler to find out if the drag was started from ++ * an icon. ++ * ++ * By default, GTK+ uses the icon as the drag icon. You can use the ++ * #GtkWidget::drag-begin signal to set a different icon. Note that you ++ * have to use g_signal_connect_after() to ensure that your signal handler ++ * gets executed after the default handler. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_drag_source (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ GtkTargetList *target_list, ++ GdkDragAction actions) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ if (icon_info->target_list) ++ gtk_target_list_unref (icon_info->target_list); ++ icon_info->target_list = target_list; ++ if (icon_info->target_list) ++ gtk_target_list_ref (icon_info->target_list); ++ ++ icon_info->actions = actions; ++} ++ ++/** ++ * gtk_entry_get_current_icon_drag_source: ++ * @entry: a #GtkEntry ++ * ++ * Returns the index of the icon which is the source of the current ++ * DND operation, or -1. ++ * ++ * This function is meant to be used in a #GtkWidget::drag-data-get ++ * callback. ++ * ++ * Returns: index of the icon which is the source of the current ++ * DND operation, or -1. ++ * ++ * Since: 2.16 ++ */ ++gint ++gtk_entry_get_current_icon_drag_source (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info = NULL; ++ gint i; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), -1); ++ ++ priv = entry->priv; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if ((icon_info = priv->icons[i])) ++ { ++ if (icon_info->in_drag) ++ return i; ++ } ++ } ++ ++ return -1; ++} ++ ++/** ++ * gtk_entry_get_icon_area: ++ * @entry: A #GtkEntry ++ * @icon_pos: Icon position ++ * @icon_area: (out): Return location for the icon’s area ++ * ++ * Gets the area where entry’s icon at @icon_pos is drawn. ++ * This function is useful when drawing something to the ++ * entry in a draw callback. ++ * ++ * If the entry is not realized or has no icon at the given position, ++ * @icon_area is filled with zeros. Otherwise, @icon_area will be filled ++ * with the icon’s allocation, relative to @entry’s allocation. ++ * ++ * See also gtk_entry_get_text_area() ++ * ++ * Since: 3.0 ++ */ ++void ++gtk_entry_get_icon_area (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ GdkRectangle *icon_area) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (icon_area != NULL); ++ ++ priv = entry->priv; ++ ++ icon_info = priv->icons[icon_pos]; ++ ++ if (icon_info) ++ { ++ GtkAllocation widget_allocation; ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &widget_allocation); ++ gtk_css_gadget_get_border_allocation (icon_info->gadget, icon_area, NULL); ++ icon_area->x -= widget_allocation.x; ++ icon_area->y -= widget_allocation.y; ++ } ++ else ++ { ++ icon_area->x = 0; ++ icon_area->y = 0; ++ icon_area->width = 0; ++ icon_area->height = 0; ++ } ++} ++ ++static void ++ensure_has_tooltip (GtkEntry *entry) ++{ ++ gchar *text = gtk_widget_get_tooltip_text (GTK_WIDGET (entry)); ++ gboolean has_tooltip = text != NULL; ++ ++ if (!has_tooltip) ++ { ++ GtkEntryPrivate *priv = entry->priv; ++ int i; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL && icon_info->tooltip != NULL) ++ { ++ has_tooltip = TRUE; ++ break; ++ } ++ } ++ } ++ else ++ { ++ g_free (text); ++ } ++ ++ gtk_widget_set_has_tooltip (GTK_WIDGET (entry), has_tooltip); ++} ++ ++/** ++ * gtk_entry_get_icon_tooltip_text: ++ * @entry: a #GtkEntry ++ * @icon_pos: the icon position ++ * ++ * Gets the contents of the tooltip on the icon at the specified ++ * position in @entry. ++ * ++ * Returns: (nullable): the tooltip text, or %NULL. Free the returned ++ * string with g_free() when done. ++ * ++ * Since: 2.16 ++ */ ++gchar * ++gtk_entry_get_icon_tooltip_text (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ gchar *text = NULL; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); ++ ++ priv = entry->priv; ++ ++ icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return NULL; ++ ++ if (icon_info->tooltip && ++ !pango_parse_markup (icon_info->tooltip, -1, 0, NULL, &text, NULL, NULL)) ++ g_assert (NULL == text); /* text should still be NULL in case of markup errors */ ++ ++ return text; ++} ++ ++/** ++ * gtk_entry_set_icon_tooltip_text: ++ * @entry: a #GtkEntry ++ * @icon_pos: the icon position ++ * @tooltip: (allow-none): the contents of the tooltip for the icon, or %NULL ++ * ++ * Sets @tooltip as the contents of the tooltip for the icon ++ * at the specified position. ++ * ++ * Use %NULL for @tooltip to remove an existing tooltip. ++ * ++ * See also gtk_widget_set_tooltip_text() and ++ * gtk_entry_set_icon_tooltip_markup(). ++ * ++ * If you unset the widget tooltip via gtk_widget_set_tooltip_text() or ++ * gtk_widget_set_tooltip_markup(), this sets GtkWidget:has-tooltip to %FALSE, ++ * which suppresses icon tooltips too. You can resolve this by then calling ++ * gtk_widget_set_has_tooltip() to set GtkWidget:has-tooltip back to %TRUE, or ++ * setting at least one non-empty tooltip on any icon achieves the same result. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_tooltip_text (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ const gchar *tooltip) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ g_free (icon_info->tooltip); ++ ++ /* Treat an empty string as a NULL string, ++ * because an empty string would be useless for a tooltip: ++ */ ++ if (tooltip && tooltip[0] == '\0') ++ tooltip = NULL; ++ ++ icon_info->tooltip = tooltip ? g_markup_escape_text (tooltip, -1) : NULL; ++ ++ ensure_has_tooltip (entry); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_TOOLTIP_TEXT_PRIMARY ++ : PROP_TOOLTIP_TEXT_SECONDARY]); ++} ++ ++/** ++ * gtk_entry_get_icon_tooltip_markup: ++ * @entry: a #GtkEntry ++ * @icon_pos: the icon position ++ * ++ * Gets the contents of the tooltip on the icon at the specified ++ * position in @entry. ++ * ++ * Returns: (nullable): the tooltip text, or %NULL. Free the returned ++ * string with g_free() when done. ++ * ++ * Since: 2.16 ++ */ ++gchar * ++gtk_entry_get_icon_tooltip_markup (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); ++ ++ priv = entry->priv; ++ ++ icon_info = priv->icons[icon_pos]; ++ ++ if (!icon_info) ++ return NULL; ++ ++ return g_strdup (icon_info->tooltip); ++} ++ ++/** ++ * gtk_entry_set_icon_tooltip_markup: ++ * @entry: a #GtkEntry ++ * @icon_pos: the icon position ++ * @tooltip: (allow-none): the contents of the tooltip for the icon, or %NULL ++ * ++ * Sets @tooltip as the contents of the tooltip for the icon at ++ * the specified position. @tooltip is assumed to be marked up with ++ * the [Pango text markup language][PangoMarkupFormat]. ++ * ++ * Use %NULL for @tooltip to remove an existing tooltip. ++ * ++ * See also gtk_widget_set_tooltip_markup() and ++ * gtk_entry_set_icon_tooltip_text(). ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_icon_tooltip_markup (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ const gchar *tooltip) ++{ ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos)); ++ ++ priv = entry->priv; ++ ++ if ((icon_info = priv->icons[icon_pos]) == NULL) ++ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); ++ ++ g_free (icon_info->tooltip); ++ ++ /* Treat an empty string as a NULL string, ++ * because an empty string would be useless for a tooltip: ++ */ ++ if (tooltip && tooltip[0] == '\0') ++ tooltip = NULL; ++ ++ icon_info->tooltip = g_strdup (tooltip); ++ ++ ensure_has_tooltip (entry); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), ++ entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ++ ? PROP_TOOLTIP_MARKUP_PRIMARY ++ : PROP_TOOLTIP_MARKUP_SECONDARY]); ++} ++ ++static gboolean ++gtk_entry_query_tooltip (GtkWidget *widget, ++ gint x, ++ gint y, ++ gboolean keyboard_tip, ++ GtkTooltip *tooltip) ++{ ++ GtkEntry *entry; ++ GtkEntryPrivate *priv; ++ EntryIconInfo *icon_info; ++ gint icon_pos; ++ ++ entry = GTK_ENTRY (widget); ++ priv = entry->priv; ++ ++ if (!keyboard_tip) ++ { ++ icon_pos = gtk_entry_get_icon_at_pos (entry, x, y); ++ if (icon_pos != -1) ++ { ++ if ((icon_info = priv->icons[icon_pos]) != NULL) ++ { ++ if (icon_info->tooltip) ++ { ++ gtk_tooltip_set_markup (tooltip, icon_info->tooltip); ++ return TRUE; ++ } ++ ++ return FALSE; ++ } ++ } ++ } ++ ++ return GTK_WIDGET_CLASS (gtk_entry_parent_class)->query_tooltip (widget, ++ x, y, ++ keyboard_tip, ++ tooltip); ++} ++ ++ ++/* Quick hack of a popup menu ++ */ ++static void ++activate_cb (GtkWidget *menuitem, ++ GtkEntry *entry) ++{ ++ const gchar *signal; ++ ++ signal = g_object_get_qdata (G_OBJECT (menuitem), quark_gtk_signal); ++ g_signal_emit_by_name (entry, signal); ++} ++ ++ ++static gboolean ++gtk_entry_mnemonic_activate (GtkWidget *widget, ++ gboolean group_cycling) ++{ ++ gtk_widget_grab_focus (widget); ++ return GDK_EVENT_STOP; ++} ++ ++static void ++check_undo_icon_grab (GtkEntry *entry, ++ EntryIconInfo *info) ++{ ++ if (!info->device || ++ !gtk_widget_device_is_shadowed (GTK_WIDGET (entry), info->device)) ++ return; ++ ++ info->pressed = FALSE; ++ info->current_sequence = NULL; ++ info->device = NULL; ++} ++ ++static void ++gtk_entry_grab_notify (GtkWidget *widget, ++ gboolean was_grabbed) ++{ ++ GtkEntryPrivate *priv; ++ gint i; ++ ++ priv = GTK_ENTRY (widget)->priv; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ if (priv->icons[i]) ++ check_undo_icon_grab (GTK_ENTRY (widget), priv->icons[i]); ++ } ++} ++ ++static void ++append_action_signal (GtkEntry *entry, ++ GtkWidget *menu, ++ const gchar *label, ++ const gchar *signal, ++ gboolean sensitive) ++{ ++ GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic (label); ++ ++ g_object_set_qdata (G_OBJECT (menuitem), quark_gtk_signal, (char *)signal); ++ g_signal_connect (menuitem, "activate", ++ G_CALLBACK (activate_cb), entry); ++ ++ gtk_widget_set_sensitive (menuitem, sensitive); ++ ++ gtk_widget_show (menuitem); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); ++} ++ ++static void ++popup_menu_detach (GtkWidget *attach_widget, ++ GtkMenu *menu) ++{ ++ GtkEntry *entry_attach = GTK_ENTRY (attach_widget); ++ GtkEntryPrivate *priv_attach = entry_attach->priv; ++ ++ priv_attach->popup_menu = NULL; ++} ++ ++typedef struct ++{ ++ GtkEntry *entry; ++ GdkEvent *trigger_event; ++} PopupInfo; ++ ++static void ++popup_targets_received (GtkClipboard *clipboard, ++ GtkSelectionData *data, ++ gpointer user_data) ++{ ++ PopupInfo *info = user_data; ++ GtkEntry *entry = info->entry; ++ GtkEntryPrivate *info_entry_priv = entry->priv; ++ GdkRectangle rect = { 0, 0, 1, 0 }; ++ ++ if (gtk_widget_get_realized (GTK_WIDGET (entry))) ++ { ++ DisplayMode mode; ++ gboolean clipboard_contains_text; ++ GtkWidget *menu; ++ GtkWidget *menuitem; ++ ++ clipboard_contains_text = gtk_selection_data_targets_include_text (data); ++ if (info_entry_priv->popup_menu) ++ gtk_widget_destroy (info_entry_priv->popup_menu); ++ ++ info_entry_priv->popup_menu = menu = gtk_menu_new (); ++ gtk_style_context_add_class (gtk_widget_get_style_context (menu), ++ GTK_STYLE_CLASS_CONTEXT_MENU); ++ ++ gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (entry), popup_menu_detach); ++ ++ mode = gtk_entry_get_display_mode (entry); ++ append_action_signal (entry, menu, _("Cu_t"), "cut-clipboard", ++ info_entry_priv->editable && mode == DISPLAY_NORMAL && ++ info_entry_priv->current_pos != info_entry_priv->selection_bound); ++ ++ append_action_signal (entry, menu, _("_Copy"), "copy-clipboard", ++ mode == DISPLAY_NORMAL && ++ info_entry_priv->current_pos != info_entry_priv->selection_bound); ++ ++ append_action_signal (entry, menu, _("_Paste"), "paste-clipboard", ++ info_entry_priv->editable && clipboard_contains_text); ++ ++ menuitem = gtk_menu_item_new_with_mnemonic (_("_Delete")); ++ gtk_widget_set_sensitive (menuitem, info_entry_priv->editable && info_entry_priv->current_pos != info_entry_priv->selection_bound); ++ g_signal_connect_swapped (menuitem, "activate", ++ G_CALLBACK (gtk_entry_delete_cb), entry); ++ gtk_widget_show (menuitem); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); ++ ++ menuitem = gtk_separator_menu_item_new (); ++ gtk_widget_show (menuitem); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); ++ ++ menuitem = gtk_menu_item_new_with_mnemonic (_("Select _All")); ++ gtk_widget_set_sensitive (menuitem, gtk_entry_buffer_get_length (info_entry_priv->buffer) > 0); ++ g_signal_connect_swapped (menuitem, "activate", ++ G_CALLBACK (gtk_entry_select_all), entry); ++ gtk_widget_show (menuitem); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); ++ ++ if (info_entry_priv->show_emoji_icon || ++ (gtk_entry_get_input_hints (entry) & GTK_INPUT_HINT_NO_EMOJI) == 0) ++ { ++ menuitem = gtk_menu_item_new_with_mnemonic (_("Insert _Emoji")); ++ gtk_widget_set_sensitive (menuitem, ++ mode == DISPLAY_NORMAL && ++ info_entry_priv->editable); ++ g_signal_connect_swapped (menuitem, "activate", ++ G_CALLBACK (gtk_entry_insert_emoji), entry); ++ gtk_widget_show (menuitem); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); ++ } ++ ++ g_signal_emit (entry, signals[POPULATE_POPUP], 0, menu); ++ ++ if (info->trigger_event && gdk_event_triggers_context_menu (info->trigger_event)) ++ gtk_menu_popup_at_pointer (GTK_MENU (menu), info->trigger_event); ++ else ++ { ++ gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &rect.x, NULL); ++ rect.x -= info_entry_priv->scroll_offset; ++ rect.height = gdk_window_get_height (info_entry_priv->text_area); ++ ++ gtk_menu_popup_at_rect (GTK_MENU (menu), ++ info_entry_priv->text_area, ++ &rect, ++ GDK_GRAVITY_SOUTH_EAST, ++ GDK_GRAVITY_NORTH_WEST, ++ info->trigger_event); ++ ++ gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE); ++ } ++ } ++ ++ g_clear_pointer (&info->trigger_event, gdk_event_free); ++ g_object_unref (entry); ++ g_slice_free (PopupInfo, info); ++} ++ ++static void ++gtk_entry_do_popup (GtkEntry *entry, ++ const GdkEvent *event) ++{ ++ PopupInfo *info = g_slice_new (PopupInfo); ++ ++ /* In order to know what entries we should make sensitive, we ++ * ask for the current targets of the clipboard, and when ++ * we get them, then we actually pop up the menu. ++ */ ++ info->entry = g_object_ref (entry); ++ info->trigger_event = event ? gdk_event_copy (event) : gtk_get_current_event (); ++ ++ gtk_clipboard_request_contents (gtk_widget_get_clipboard (GTK_WIDGET (entry), GDK_SELECTION_CLIPBOARD), ++ gdk_atom_intern_static_string ("TARGETS"), ++ popup_targets_received, ++ info); ++} ++ ++static gboolean ++gtk_entry_popup_menu (GtkWidget *widget) ++{ ++ gtk_entry_do_popup (GTK_ENTRY (widget), NULL); ++ return GDK_EVENT_STOP; ++} ++ ++static void ++show_or_hide_handles (GtkWidget *popover, ++ GParamSpec *pspec, ++ GtkEntry *entry) ++{ ++ gboolean visible; ++ GtkTextHandle *handle; ++ GtkTextHandleMode mode; ++ ++ visible = gtk_widget_get_visible (popover); ++ ++ handle = entry->priv->text_handle; ++ mode = _gtk_text_handle_get_mode (handle); ++ ++ if (mode == GTK_TEXT_HANDLE_MODE_CURSOR) ++ { ++ _gtk_text_handle_set_visible (handle, GTK_TEXT_HANDLE_POSITION_CURSOR, !visible); ++ } ++ else if (mode == GTK_TEXT_HANDLE_MODE_SELECTION) ++ { ++ _gtk_text_handle_set_visible (handle, GTK_TEXT_HANDLE_POSITION_SELECTION_START, !visible); ++ _gtk_text_handle_set_visible (handle, GTK_TEXT_HANDLE_POSITION_SELECTION_END, !visible); ++ } ++} ++ ++static void ++activate_bubble_cb (GtkWidget *item, ++ GtkEntry *entry) ++{ ++ const gchar *signal; ++ ++ signal = g_object_get_qdata (G_OBJECT (item), quark_gtk_signal); ++ gtk_widget_hide (entry->priv->selection_bubble); ++ if (strcmp (signal, "select-all") == 0) ++ gtk_entry_select_all (entry); ++ else ++ g_signal_emit_by_name (entry, signal); ++} ++ ++static void ++append_bubble_action (GtkEntry *entry, ++ GtkWidget *toolbar, ++ const gchar *label, ++ const gchar *icon_name, ++ const gchar *signal, ++ gboolean sensitive) ++{ ++ GtkWidget *item, *image; ++ ++ item = gtk_button_new (); ++ gtk_widget_set_focus_on_click (item, FALSE); ++ image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); ++ gtk_widget_show (image); ++ gtk_container_add (GTK_CONTAINER (item), image); ++ gtk_widget_set_tooltip_text (item, label); ++ gtk_style_context_add_class (gtk_widget_get_style_context (item), "image-button"); ++ g_object_set_qdata (G_OBJECT (item), quark_gtk_signal, (char *)signal); ++ g_signal_connect (item, "clicked", G_CALLBACK (activate_bubble_cb), entry); ++ gtk_widget_set_sensitive (GTK_WIDGET (item), sensitive); ++ gtk_widget_show (GTK_WIDGET (item)); ++ gtk_container_add (GTK_CONTAINER (toolbar), item); ++} ++ ++static void ++bubble_targets_received (GtkClipboard *clipboard, ++ GtkSelectionData *data, ++ gpointer user_data) ++{ ++ GtkEntry *entry = user_data; ++ GtkEntryPrivate *priv = entry->priv; ++ cairo_rectangle_int_t rect; ++ GtkAllocation allocation; ++ gint start_x, end_x; ++ gboolean has_selection; ++ gboolean has_clipboard; ++ gboolean all_selected; ++ DisplayMode mode; ++ GtkWidget *box; ++ GtkWidget *toolbar; ++ gint length, start, end; ++ ++ has_selection = gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end); ++ length = gtk_entry_buffer_get_length (get_buffer (entry)); ++ all_selected = (start == 0) && (end == length); ++ ++ if (!has_selection && !priv->editable) ++ { ++ priv->selection_bubble_timeout_id = 0; ++ return; ++ } ++ ++ if (priv->selection_bubble) ++ gtk_widget_destroy (priv->selection_bubble); ++ ++ priv->selection_bubble = gtk_popover_new (GTK_WIDGET (entry)); ++ gtk_style_context_add_class (gtk_widget_get_style_context (priv->selection_bubble), ++ GTK_STYLE_CLASS_TOUCH_SELECTION); ++ gtk_popover_set_position (GTK_POPOVER (priv->selection_bubble), GTK_POS_BOTTOM); ++ gtk_popover_set_modal (GTK_POPOVER (priv->selection_bubble), FALSE); ++ g_signal_connect (priv->selection_bubble, "notify::visible", ++ G_CALLBACK (show_or_hide_handles), entry); ++ ++ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); ++ g_object_set (box, "margin", 10, NULL); ++ gtk_widget_show (box); ++ toolbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); ++ gtk_widget_show (toolbar); ++ gtk_container_add (GTK_CONTAINER (priv->selection_bubble), box); ++ gtk_container_add (GTK_CONTAINER (box), toolbar); ++ ++ has_clipboard = gtk_selection_data_targets_include_text (data); ++ mode = gtk_entry_get_display_mode (entry); ++ ++ if (mode == DISPLAY_NORMAL) ++ append_bubble_action (entry, toolbar, _("Select all"), "edit-select-all-symbolic", "select-all", !all_selected); ++ ++ if (priv->editable && has_selection && mode == DISPLAY_NORMAL) ++ append_bubble_action (entry, toolbar, _("Cut"), "edit-cut-symbolic", "cut-clipboard", TRUE); ++ ++ if (has_selection && mode == DISPLAY_NORMAL) ++ append_bubble_action (entry, toolbar, _("Copy"), "edit-copy-symbolic", "copy-clipboard", TRUE); ++ ++ if (priv->editable) ++ append_bubble_action (entry, toolbar, _("Paste"), "edit-paste-symbolic", "paste-clipboard", has_clipboard); ++ ++ if (priv->populate_all) ++ g_signal_emit (entry, signals[POPULATE_POPUP], 0, box); ++ ++ gtk_widget_get_allocation (GTK_WIDGET (entry), &allocation); ++ ++ gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &start_x, NULL); ++ ++ start_x -= priv->scroll_offset; ++ start_x = CLAMP (start_x, 0, priv->text_allocation.width); ++ rect.y = priv->text_allocation.y - allocation.y; ++ rect.height = priv->text_allocation.height; ++ ++ if (has_selection) ++ { ++ end_x = gtk_entry_get_selection_bound_location (entry) - priv->scroll_offset; ++ end_x = CLAMP (end_x, 0, priv->text_allocation.width); ++ ++ rect.x = priv->text_allocation.x - allocation.x + MIN (start_x, end_x); ++ rect.width = ABS (end_x - start_x); ++ } ++ else ++ { ++ rect.x = priv->text_allocation.x - allocation.x + start_x; ++ rect.width = 0; ++ } ++ ++ rect.x -= 5; ++ rect.y -= 5; ++ rect.width += 10; ++ rect.height += 10; ++ ++ gtk_popover_set_pointing_to (GTK_POPOVER (priv->selection_bubble), &rect); ++ gtk_widget_show (priv->selection_bubble); ++ ++ priv->selection_bubble_timeout_id = 0; ++} ++ ++static gboolean ++gtk_entry_selection_bubble_popup_show (gpointer user_data) ++{ ++ GtkEntry *entry = user_data; ++ ++ gtk_clipboard_request_contents (gtk_widget_get_clipboard (GTK_WIDGET (entry), GDK_SELECTION_CLIPBOARD), ++ gdk_atom_intern_static_string ("TARGETS"), ++ bubble_targets_received, ++ entry); ++ return G_SOURCE_REMOVE; ++} ++ ++static void ++gtk_entry_selection_bubble_popup_unset (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv; ++ ++ priv = entry->priv; ++ ++ if (priv->selection_bubble) ++ gtk_widget_hide (priv->selection_bubble); ++ ++ if (priv->selection_bubble_timeout_id) ++ { ++ g_source_remove (priv->selection_bubble_timeout_id); ++ priv->selection_bubble_timeout_id = 0; ++ } ++} ++ ++static void ++gtk_entry_selection_bubble_popup_set (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv; ++ ++ priv = entry->priv; ++ ++ if (priv->selection_bubble_timeout_id) ++ g_source_remove (priv->selection_bubble_timeout_id); ++ ++ priv->selection_bubble_timeout_id = ++ gdk_threads_add_timeout (50, gtk_entry_selection_bubble_popup_show, entry); ++ g_source_set_name_by_id (priv->selection_bubble_timeout_id, "[gtk+] gtk_entry_selection_bubble_popup_cb"); ++} ++ ++static void ++gtk_entry_drag_begin (GtkWidget *widget, ++ GdkDragContext *context) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gchar *text; ++ gint i; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL) ++ { ++ if (icon_info->in_drag) ++ { ++ gtk_drag_set_icon_definition (context, ++ gtk_icon_helper_get_definition (GTK_ICON_HELPER (icon_info->gadget)), ++ -2, -2); ++ return; ++ } ++ } ++ } ++ ++ text = _gtk_entry_get_selected_text (entry); ++ ++ if (text) ++ { ++ gint *ranges, n_ranges; ++ cairo_surface_t *surface; ++ double sx, sy; ++ ++ surface = _gtk_text_util_create_drag_icon (widget, text, -1); ++ ++ gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges); ++ cairo_surface_get_device_scale (surface, &sx, &sy); ++ cairo_surface_set_device_offset (surface, ++ -(priv->drag_start_x - ranges[0]) * sx, ++ -(priv->drag_start_y) * sy); ++ g_free (ranges); ++ ++ gtk_drag_set_icon_surface (context, surface); ++ cairo_surface_destroy (surface); ++ g_free (text); ++ } ++} ++ ++static void ++gtk_entry_drag_end (GtkWidget *widget, ++ GdkDragContext *context) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gint i; ++ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL) ++ icon_info->in_drag = 0; ++ } ++} ++ ++static void ++gtk_entry_drag_leave (GtkWidget *widget, ++ GdkDragContext *context, ++ guint time) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ ++ gtk_drag_unhighlight (widget); ++ priv->dnd_position = -1; ++ gtk_widget_queue_draw (widget); ++} ++ ++static gboolean ++gtk_entry_drag_drop (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GdkAtom target = GDK_NONE; ++ ++ if (priv->editable) ++ target = gtk_drag_dest_find_target (widget, context, NULL); ++ ++ if (target != GDK_NONE) ++ gtk_drag_get_data (widget, context, target, time); ++ else ++ gtk_drag_finish (context, FALSE, FALSE, time); ++ ++ return TRUE; ++} ++ ++static gboolean ++gtk_entry_drag_motion (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GtkWidget *source_widget; ++ GdkDragAction suggested_action; ++ gint new_position, old_position; ++ gint sel1, sel2; ++ ++ old_position = priv->dnd_position; ++ new_position = gtk_entry_find_position (entry, x + priv->scroll_offset); ++ ++ if (priv->editable && ++ gtk_drag_dest_find_target (widget, context, NULL) != GDK_NONE) ++ { ++ source_widget = gtk_drag_get_source_widget (context); ++ suggested_action = gdk_drag_context_get_suggested_action (context); ++ ++ if (!gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &sel1, &sel2) || ++ new_position < sel1 || new_position > sel2) ++ { ++ if (source_widget == widget) ++ { ++ /* Default to MOVE, unless the user has ++ * pressed ctrl or alt to affect available actions ++ */ ++ if ((gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE) != 0) ++ suggested_action = GDK_ACTION_MOVE; ++ } ++ ++ priv->dnd_position = new_position; ++ } ++ else ++ { ++ if (source_widget == widget) ++ suggested_action = 0; /* Can't drop in selection where drag started */ ++ ++ priv->dnd_position = -1; ++ } ++ } ++ else ++ { ++ /* Entry not editable, or no text */ ++ suggested_action = 0; ++ priv->dnd_position = -1; ++ } ++ ++ if (show_placeholder_text (entry)) ++ priv->dnd_position = -1; ++ ++ gdk_drag_status (context, suggested_action, time); ++ if (suggested_action == 0) ++ gtk_drag_unhighlight (widget); ++ else ++ gtk_drag_highlight (widget); ++ ++ if (priv->dnd_position != old_position) ++ gtk_widget_queue_draw (widget); ++ ++ return TRUE; ++} ++ ++static void ++gtk_entry_drag_data_received (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ GtkSelectionData *selection_data, ++ guint info, ++ guint time) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (widget); ++ gchar *str; ++ ++ str = (gchar *) gtk_selection_data_get_text (selection_data); ++ ++ if (str && priv->editable) ++ { ++ gint new_position; ++ gint sel1, sel2; ++ gint length = -1; ++ ++ if (priv->truncate_multiline) ++ length = truncate_multiline (str); ++ ++ new_position = gtk_entry_find_position (entry, x + priv->scroll_offset); ++ ++ if (!gtk_editable_get_selection_bounds (editable, &sel1, &sel2) || ++ new_position < sel1 || new_position > sel2) ++ { ++ gtk_editable_insert_text (editable, str, length, &new_position); ++ } ++ else ++ { ++ /* Replacing selection */ ++ begin_change (entry); ++ gtk_editable_delete_text (editable, sel1, sel2); ++ gtk_editable_insert_text (editable, str, length, &sel1); ++ end_change (entry); ++ } ++ ++ gtk_drag_finish (context, TRUE, gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE, time); ++ } ++ else ++ { ++ /* Drag and drop didn't happen! */ ++ gtk_drag_finish (context, FALSE, FALSE, time); ++ } ++ ++ g_free (str); ++} ++ ++static void ++gtk_entry_drag_data_get (GtkWidget *widget, ++ GdkDragContext *context, ++ GtkSelectionData *selection_data, ++ guint info, ++ guint time) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (widget); ++ gint sel_start, sel_end; ++ gint i; ++ ++ /* If there is an icon drag going on, exit early. */ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL) ++ { ++ if (icon_info->in_drag) ++ return; ++ } ++ } ++ ++ if (gtk_editable_get_selection_bounds (editable, &sel_start, &sel_end)) ++ { ++ gchar *str = _gtk_entry_get_display_text (GTK_ENTRY (widget), sel_start, sel_end); ++ ++ gtk_selection_data_set_text (selection_data, str, -1); ++ ++ g_free (str); ++ } ++ ++} ++ ++static void ++gtk_entry_drag_data_delete (GtkWidget *widget, ++ GdkDragContext *context) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ GtkEditable *editable = GTK_EDITABLE (widget); ++ gint sel_start, sel_end; ++ gint i; ++ ++ /* If there is an icon drag going on, exit early. */ ++ for (i = 0; i < MAX_ICONS; i++) ++ { ++ EntryIconInfo *icon_info = priv->icons[i]; ++ ++ if (icon_info != NULL) ++ { ++ if (icon_info->in_drag) ++ return; ++ } ++ } ++ ++ if (priv->editable && ++ gtk_editable_get_selection_bounds (editable, &sel_start, &sel_end)) ++ gtk_editable_delete_text (editable, sel_start, sel_end); ++} ++ ++/* We display the cursor when ++ * ++ * - the selection is empty, AND ++ * - the widget has focus ++ */ ++ ++#define CURSOR_ON_MULTIPLIER 2 ++#define CURSOR_OFF_MULTIPLIER 1 ++#define CURSOR_PEND_MULTIPLIER 3 ++#define CURSOR_DIVIDER 3 ++ ++static gboolean ++cursor_blinks (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (gtk_widget_has_focus (GTK_WIDGET (entry)) && ++ priv->editable && ++ priv->selection_bound == priv->current_pos) ++ { ++ GtkSettings *settings; ++ gboolean blink; ++ ++ settings = gtk_widget_get_settings (GTK_WIDGET (entry)); ++ g_object_get (settings, "gtk-cursor-blink", &blink, NULL); ++ ++ return blink; ++ } ++ else ++ return FALSE; ++} ++ ++static gboolean ++get_middle_click_paste (GtkEntry *entry) ++{ ++ GtkSettings *settings; ++ gboolean paste; ++ ++ settings = gtk_widget_get_settings (GTK_WIDGET (entry)); ++ g_object_get (settings, "gtk-enable-primary-paste", &paste, NULL); ++ ++ return paste; ++} ++ ++static gint ++get_cursor_time (GtkEntry *entry) ++{ ++ GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (entry)); ++ gint time; ++ ++ g_object_get (settings, "gtk-cursor-blink-time", &time, NULL); ++ ++ return time; ++} ++ ++static gint ++get_cursor_blink_timeout (GtkEntry *entry) ++{ ++ GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (entry)); ++ gint timeout; ++ ++ g_object_get (settings, "gtk-cursor-blink-timeout", &timeout, NULL); ++ ++ return timeout; ++} ++ ++static void ++show_cursor (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkWidget *widget; ++ ++ if (!priv->cursor_visible) ++ { ++ priv->cursor_visible = TRUE; ++ ++ widget = GTK_WIDGET (entry); ++ if (gtk_widget_has_focus (widget) && priv->selection_bound == priv->current_pos) ++ gtk_widget_queue_draw (widget); ++ } ++} ++ ++static void ++hide_cursor (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ GtkWidget *widget; ++ ++ if (priv->cursor_visible) ++ { ++ priv->cursor_visible = FALSE; ++ ++ widget = GTK_WIDGET (entry); ++ if (gtk_widget_has_focus (widget) && priv->selection_bound == priv->current_pos) ++ gtk_widget_queue_draw (widget); ++ } ++} ++ ++/* ++ * Blink! ++ */ ++static gint ++blink_cb (gpointer data) ++{ ++ GtkEntry *entry; ++ GtkEntryPrivate *priv; ++ gint blink_timeout; ++ ++ entry = GTK_ENTRY (data); ++ priv = entry->priv; ++ ++ if (!gtk_widget_has_focus (GTK_WIDGET (entry))) ++ { ++ g_warning ("GtkEntry - did not receive focus-out-event. If you\n" ++ "connect a handler to this signal, it must return\n" ++ "GDK_EVENT_PROPAGATE so the entry gets the event as well"); ++ ++ gtk_entry_check_cursor_blink (entry); ++ ++ return G_SOURCE_REMOVE; ++ } ++ ++ g_assert (priv->selection_bound == priv->current_pos); ++ ++ blink_timeout = get_cursor_blink_timeout (entry); ++ if (priv->blink_time > 1000 * blink_timeout && ++ blink_timeout < G_MAXINT/1000) ++ { ++ /* we've blinked enough without the user doing anything, stop blinking */ ++ show_cursor (entry); ++ priv->blink_timeout = 0; ++ } ++ else if (priv->cursor_visible) ++ { ++ hide_cursor (entry); ++ priv->blink_timeout = gdk_threads_add_timeout (get_cursor_time (entry) * CURSOR_OFF_MULTIPLIER / CURSOR_DIVIDER, ++ blink_cb, ++ entry); ++ g_source_set_name_by_id (priv->blink_timeout, "[gtk+] blink_cb"); ++ } ++ else ++ { ++ show_cursor (entry); ++ priv->blink_time += get_cursor_time (entry); ++ priv->blink_timeout = gdk_threads_add_timeout (get_cursor_time (entry) * CURSOR_ON_MULTIPLIER / CURSOR_DIVIDER, ++ blink_cb, ++ entry); ++ g_source_set_name_by_id (priv->blink_timeout, "[gtk+] blink_cb"); ++ } ++ ++ return G_SOURCE_REMOVE; ++} ++ ++static void ++gtk_entry_check_cursor_blink (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (cursor_blinks (entry)) ++ { ++ if (!priv->blink_timeout) ++ { ++ show_cursor (entry); ++ priv->blink_timeout = gdk_threads_add_timeout (get_cursor_time (entry) * CURSOR_ON_MULTIPLIER / CURSOR_DIVIDER, ++ blink_cb, ++ entry); ++ g_source_set_name_by_id (priv->blink_timeout, "[gtk+] blink_cb"); ++ } ++ } ++ else ++ { ++ if (priv->blink_timeout) ++ { ++ g_source_remove (priv->blink_timeout); ++ priv->blink_timeout = 0; ++ } ++ ++ priv->cursor_visible = TRUE; ++ } ++} ++ ++static void ++gtk_entry_pend_cursor_blink (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (cursor_blinks (entry)) ++ { ++ if (priv->blink_timeout != 0) ++ g_source_remove (priv->blink_timeout); ++ ++ priv->blink_timeout = gdk_threads_add_timeout (get_cursor_time (entry) * CURSOR_PEND_MULTIPLIER / CURSOR_DIVIDER, ++ blink_cb, ++ entry); ++ g_source_set_name_by_id (priv->blink_timeout, "[gtk+] blink_cb"); ++ show_cursor (entry); ++ } ++} ++ ++static void ++gtk_entry_reset_blink_time (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ priv->blink_time = 0; ++} ++ ++/** ++ * gtk_entry_set_completion: ++ * @entry: A #GtkEntry ++ * @completion: (allow-none): The #GtkEntryCompletion or %NULL ++ * ++ * Sets @completion to be the auxiliary completion object to use with @entry. ++ * All further configuration of the completion mechanism is done on ++ * @completion using the #GtkEntryCompletion API. Completion is disabled if ++ * @completion is set to %NULL. ++ * ++ * Since: 2.4 ++ */ ++void ++gtk_entry_set_completion (GtkEntry *entry, ++ GtkEntryCompletion *completion) ++{ ++ GtkEntryCompletion *old; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ g_return_if_fail (!completion || GTK_IS_ENTRY_COMPLETION (completion)); ++ ++ old = gtk_entry_get_completion (entry); ++ ++ if (old == completion) ++ return; ++ ++ if (old) ++ { ++ _gtk_entry_completion_disconnect (old); ++ g_object_unref (old); ++ } ++ ++ if (!completion) ++ { ++ g_object_set_qdata (G_OBJECT (entry), quark_entry_completion, NULL); ++ return; ++ } ++ ++ /* hook into the entry */ ++ g_object_ref (completion); ++ ++ _gtk_entry_completion_connect (completion, entry); ++ ++ g_object_set_qdata (G_OBJECT (entry), quark_entry_completion, completion); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_COMPLETION]); ++} ++ ++/** ++ * gtk_entry_get_completion: ++ * @entry: A #GtkEntry ++ * ++ * Returns the auxiliary completion object currently in use by @entry. ++ * ++ * Returns: (transfer none): The auxiliary completion object currently ++ * in use by @entry. ++ * ++ * Since: 2.4 ++ */ ++GtkEntryCompletion * ++gtk_entry_get_completion (GtkEntry *entry) ++{ ++ GtkEntryCompletion *completion; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ completion = GTK_ENTRY_COMPLETION (g_object_get_qdata (G_OBJECT (entry), quark_entry_completion)); ++ ++ return completion; ++} ++ ++/** ++ * gtk_entry_set_cursor_hadjustment: ++ * @entry: a #GtkEntry ++ * @adjustment: (nullable): an adjustment which should be adjusted when the cursor ++ * is moved, or %NULL ++ * ++ * Hooks up an adjustment to the cursor position in an entry, so that when ++ * the cursor is moved, the adjustment is scrolled to show that position. ++ * See gtk_scrolled_window_get_hadjustment() for a typical way of obtaining ++ * the adjustment. ++ * ++ * The adjustment has to be in pixel units and in the same coordinate system ++ * as the entry. ++ * ++ * Since: 2.12 ++ */ ++void ++gtk_entry_set_cursor_hadjustment (GtkEntry *entry, ++ GtkAdjustment *adjustment) ++{ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ if (adjustment) ++ g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); ++ ++ if (adjustment) ++ g_object_ref (adjustment); ++ ++ g_object_set_qdata_full (G_OBJECT (entry), ++ quark_cursor_hadjustment, ++ adjustment, ++ g_object_unref); ++} ++ ++/** ++ * gtk_entry_get_cursor_hadjustment: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the horizontal cursor adjustment for the entry. ++ * See gtk_entry_set_cursor_hadjustment(). ++ * ++ * Returns: (transfer none) (nullable): the horizontal cursor adjustment, or %NULL ++ * if none has been set. ++ * ++ * Since: 2.12 ++ */ ++GtkAdjustment* ++gtk_entry_get_cursor_hadjustment (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ return g_object_get_qdata (G_OBJECT (entry), quark_cursor_hadjustment); ++} ++ ++static gboolean ++tick_cb (GtkWidget *widget, ++ GdkFrameClock *frame_clock, ++ gpointer user_data) ++{ ++ GtkEntry *entry = GTK_ENTRY (widget); ++ GtkEntryPrivate *priv = entry->priv; ++ gint64 frame_time; ++ gdouble iteration, pulse_iterations, current_iterations, fraction; ++ ++ if (priv->pulse2 == 0 && priv->pulse1 == 0) ++ return G_SOURCE_CONTINUE; ++ ++ frame_time = gdk_frame_clock_get_frame_time (frame_clock); ++ gtk_progress_tracker_advance_frame (&priv->tracker, frame_time); ++ ++ g_assert (priv->pulse2 > priv->pulse1); ++ ++ pulse_iterations = (priv->pulse2 - priv->pulse1) / (gdouble) G_USEC_PER_SEC; ++ current_iterations = (frame_time - priv->pulse1) / (gdouble) G_USEC_PER_SEC; ++ ++ iteration = gtk_progress_tracker_get_iteration (&priv->tracker); ++ /* Determine the fraction to move the block from one frame ++ * to the next when pulse_fraction is how far the block should ++ * move between two calls to gtk_entry_progress_pulse(). ++ */ ++ fraction = priv->progress_pulse_fraction * (iteration - priv->last_iteration) / MAX (pulse_iterations, current_iterations); ++ priv->last_iteration = iteration; ++ ++ if (current_iterations > 3 * pulse_iterations) ++ return G_SOURCE_CONTINUE; ++ ++ /* advance the block */ ++ if (priv->progress_pulse_way_back) ++ { ++ priv->progress_pulse_current -= fraction; ++ ++ if (priv->progress_pulse_current < 0.0) ++ { ++ priv->progress_pulse_current = 0.0; ++ priv->progress_pulse_way_back = FALSE; ++ } ++ } ++ else ++ { ++ priv->progress_pulse_current += fraction; ++ ++ if (priv->progress_pulse_current > 1.0 - priv->progress_pulse_fraction) ++ { ++ priv->progress_pulse_current = 1.0 - priv->progress_pulse_fraction; ++ priv->progress_pulse_way_back = TRUE; ++ } ++ } ++ ++ gtk_widget_queue_allocate (widget); ++ ++ return G_SOURCE_CONTINUE; ++} ++ ++static void ++gtk_entry_ensure_progress_gadget (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->progress_gadget) ++ return; ++ ++ priv->progress_gadget = gtk_css_custom_gadget_new ("progress", ++ GTK_WIDGET (entry), ++ priv->gadget, ++ NULL, ++ NULL, ++ NULL, ++ NULL, ++ NULL, ++ NULL); ++ gtk_css_gadget_set_state (priv->progress_gadget, ++ gtk_css_node_get_state (gtk_widget_get_css_node (GTK_WIDGET (entry)))); ++ ++ update_node_ordering (entry); ++} ++ ++static void ++gtk_entry_start_pulse_mode (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->progress_pulse_mode) ++ return; ++ ++ gtk_entry_ensure_progress_gadget (entry); ++ gtk_css_gadget_set_visible (priv->progress_gadget, TRUE); ++ gtk_css_gadget_add_class (priv->progress_gadget, GTK_STYLE_CLASS_PULSE); ++ ++ priv->progress_pulse_mode = TRUE; ++ /* How long each pulse should last depends on calls to gtk_entry_progress_pulse. ++ * Just start the tracker to repeat forever with iterations every second. */ ++ gtk_progress_tracker_start (&priv->tracker, G_USEC_PER_SEC, 0, INFINITY); ++ priv->tick_id = gtk_widget_add_tick_callback (GTK_WIDGET (entry), tick_cb, NULL, NULL); ++ ++ priv->progress_fraction = 0.0; ++ priv->progress_pulse_way_back = FALSE; ++ priv->progress_pulse_current = 0.0; ++ ++ priv->pulse2 = 0; ++ priv->pulse1 = 0; ++ priv->last_iteration = 0; ++} ++ ++static void ++gtk_entry_stop_pulse_mode (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->progress_pulse_mode) ++ { ++ gtk_css_gadget_set_visible (priv->progress_gadget, FALSE); ++ gtk_css_gadget_remove_class (priv->progress_gadget, GTK_STYLE_CLASS_PULSE); ++ ++ priv->progress_pulse_mode = FALSE; ++ gtk_widget_remove_tick_callback (GTK_WIDGET (entry), priv->tick_id); ++ priv->tick_id = 0; ++ } ++} ++ ++static void ++gtk_entry_update_pulse (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ gint64 pulse_time = g_get_monotonic_time (); ++ ++ if (priv->pulse2 == pulse_time) ++ return; ++ ++ priv->pulse1 = priv->pulse2; ++ priv->pulse2 = pulse_time; ++} ++ ++/** ++ * gtk_entry_set_progress_fraction: ++ * @entry: a #GtkEntry ++ * @fraction: fraction of the task that’s been completed ++ * ++ * Causes the entry’s progress indicator to “fill in” the given ++ * fraction of the bar. The fraction should be between 0.0 and 1.0, ++ * inclusive. ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_progress_fraction (GtkEntry *entry, ++ gdouble fraction) ++{ ++ GtkWidget *widget; ++ GtkEntryPrivate *private; ++ gdouble old_fraction; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ widget = GTK_WIDGET (entry); ++ private = entry->priv; ++ ++ if (private->progress_pulse_mode) ++ old_fraction = -1; ++ else ++ old_fraction = private->progress_fraction; ++ ++ gtk_entry_stop_pulse_mode (entry); ++ ++ gtk_entry_ensure_progress_gadget (entry); ++ ++ fraction = CLAMP (fraction, 0.0, 1.0); ++ private->progress_fraction = fraction; ++ private->progress_pulse_current = 0.0; ++ ++ if (fraction != old_fraction) ++ { ++ gtk_css_gadget_set_visible (private->progress_gadget, fraction > 0); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_PROGRESS_FRACTION]); ++ gtk_widget_queue_allocate (widget); ++ } ++} ++ ++/** ++ * gtk_entry_get_progress_fraction: ++ * @entry: a #GtkEntry ++ * ++ * Returns the current fraction of the task that’s been completed. ++ * See gtk_entry_set_progress_fraction(). ++ * ++ * Returns: a fraction from 0.0 to 1.0 ++ * ++ * Since: 2.16 ++ */ ++gdouble ++gtk_entry_get_progress_fraction (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0.0); ++ ++ return entry->priv->progress_fraction; ++} ++ ++/** ++ * gtk_entry_set_progress_pulse_step: ++ * @entry: a #GtkEntry ++ * @fraction: fraction between 0.0 and 1.0 ++ * ++ * Sets the fraction of total entry width to move the progress ++ * bouncing block for each call to gtk_entry_progress_pulse(). ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_set_progress_pulse_step (GtkEntry *entry, ++ gdouble fraction) ++{ ++ GtkEntryPrivate *private; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ private = entry->priv; ++ ++ fraction = CLAMP (fraction, 0.0, 1.0); ++ ++ if (fraction != private->progress_pulse_fraction) ++ { ++ private->progress_pulse_fraction = fraction; ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_PROGRESS_PULSE_STEP]); ++ } ++} ++ ++/** ++ * gtk_entry_get_progress_pulse_step: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the pulse step set with gtk_entry_set_progress_pulse_step(). ++ * ++ * Returns: a fraction from 0.0 to 1.0 ++ * ++ * Since: 2.16 ++ */ ++gdouble ++gtk_entry_get_progress_pulse_step (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), 0.0); ++ ++ return entry->priv->progress_pulse_fraction; ++} ++ ++/** ++ * gtk_entry_progress_pulse: ++ * @entry: a #GtkEntry ++ * ++ * Indicates that some progress is made, but you don’t know how much. ++ * Causes the entry’s progress indicator to enter “activity mode,” ++ * where a block bounces back and forth. Each call to ++ * gtk_entry_progress_pulse() causes the block to move by a little bit ++ * (the amount of movement per pulse is determined by ++ * gtk_entry_set_progress_pulse_step()). ++ * ++ * Since: 2.16 ++ */ ++void ++gtk_entry_progress_pulse (GtkEntry *entry) ++{ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ gtk_entry_start_pulse_mode (entry); ++ gtk_entry_update_pulse (entry); ++} ++ ++/** ++ * gtk_entry_set_placeholder_text: ++ * @entry: a #GtkEntry ++ * @text: (nullable): a string to be displayed when @entry is empty and unfocused, or %NULL ++ * ++ * Sets text to be displayed in @entry when it is empty and unfocused. ++ * This can be used to give a visual hint of the expected contents of ++ * the #GtkEntry. ++ * ++ * Note that since the placeholder text gets removed when the entry ++ * received focus, using this feature is a bit problematic if the entry ++ * is given the initial focus in a window. Sometimes this can be ++ * worked around by delaying the initial focus setting until the ++ * first key event arrives. ++ * ++ * Since: 3.2 ++ **/ ++void ++gtk_entry_set_placeholder_text (GtkEntry *entry, ++ const gchar *text) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ ++ if (g_strcmp0 (priv->placeholder_text, text) == 0) ++ return; ++ ++ g_free (priv->placeholder_text); ++ priv->placeholder_text = g_strdup (text); ++ ++ gtk_entry_recompute (entry); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_PLACEHOLDER_TEXT]); ++} ++ ++/** ++ * gtk_entry_get_placeholder_text: ++ * @entry: a #GtkEntry ++ * ++ * Retrieves the text that will be displayed when @entry is empty and unfocused ++ * ++ * Returns: a pointer to the placeholder text as a string. This string points to internally allocated ++ * storage in the widget and must not be freed, modified or stored. ++ * ++ * Since: 3.2 ++ **/ ++const gchar * ++gtk_entry_get_placeholder_text (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ priv = entry->priv; ++ ++ return priv->placeholder_text; ++} ++ ++/* Caps Lock warning for password entries */ ++ ++static void ++show_capslock_feedback (GtkEntry *entry, ++ const gchar *text) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (gtk_entry_get_icon_storage_type (entry, GTK_ENTRY_ICON_SECONDARY) == GTK_IMAGE_EMPTY) ++ { ++ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, "caps-lock-symbolic"); ++ gtk_entry_set_icon_activatable (entry, GTK_ENTRY_ICON_SECONDARY, FALSE); ++ priv->caps_lock_warning_shown = TRUE; ++ } ++ ++ if (priv->caps_lock_warning_shown) ++ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY, text); ++ else ++ g_warning ("Can't show Caps Lock warning, since secondary icon is set"); ++} ++ ++static void ++remove_capslock_feedback (GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->caps_lock_warning_shown) ++ { ++ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, NULL); ++ priv->caps_lock_warning_shown = FALSE; ++ } ++} ++ ++static void ++keymap_state_changed (GdkKeymap *keymap, ++ GtkEntry *entry) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ char *text = NULL; ++ ++ if (gtk_entry_get_display_mode (entry) != DISPLAY_NORMAL && priv->caps_lock_warning) ++ { ++ if (gdk_keymap_get_caps_lock_state (keymap)) ++ text = _("Caps Lock is on"); ++ } ++ ++ if (text) ++ show_capslock_feedback (entry, text); ++ else ++ remove_capslock_feedback (entry); ++} ++ ++/** ++ * gtk_entry_set_input_purpose: ++ * @entry: a #GtkEntry ++ * @purpose: the purpose ++ * ++ * Sets the #GtkEntry:input-purpose property which ++ * can be used by on-screen keyboards and other input ++ * methods to adjust their behaviour. ++ * ++ * Since: 3.6 ++ */ ++void ++gtk_entry_set_input_purpose (GtkEntry *entry, ++ GtkInputPurpose purpose) ++ ++{ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ if (gtk_entry_get_input_purpose (entry) != purpose) ++ { ++ g_object_set (G_OBJECT (entry->priv->im_context), ++ "input-purpose", purpose, ++ NULL); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INPUT_PURPOSE]); ++ } ++} ++ ++/** ++ * gtk_entry_get_input_purpose: ++ * @entry: a #GtkEntry ++ * ++ * Gets the value of the #GtkEntry:input-purpose property. ++ * ++ * Since: 3.6 ++ */ ++GtkInputPurpose ++gtk_entry_get_input_purpose (GtkEntry *entry) ++{ ++ GtkInputPurpose purpose; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), GTK_INPUT_PURPOSE_FREE_FORM); ++ ++ g_object_get (G_OBJECT (entry->priv->im_context), ++ "input-purpose", &purpose, ++ NULL); ++ ++ return purpose; ++} ++ ++/** ++ * gtk_entry_set_input_hints: ++ * @entry: a #GtkEntry ++ * @hints: the hints ++ * ++ * Sets the #GtkEntry:input-hints property, which ++ * allows input methods to fine-tune their behaviour. ++ * ++ * Since: 3.6 ++ */ ++void ++gtk_entry_set_input_hints (GtkEntry *entry, ++ GtkInputHints hints) ++ ++{ ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ if (gtk_entry_get_input_hints (entry) != hints) ++ { ++ g_object_set (G_OBJECT (entry->priv->im_context), ++ "input-hints", hints, ++ NULL); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_INPUT_HINTS]); ++ } ++} ++ ++/** ++ * gtk_entry_get_input_hints: ++ * @entry: a #GtkEntry ++ * ++ * Gets the value of the #GtkEntry:input-hints property. ++ * ++ * Since: 3.6 ++ */ ++GtkInputHints ++gtk_entry_get_input_hints (GtkEntry *entry) ++{ ++ GtkInputHints hints; ++ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), GTK_INPUT_HINT_NONE); ++ ++ g_object_get (G_OBJECT (entry->priv->im_context), ++ "input-hints", &hints, ++ NULL); ++ ++ return hints; ++} ++ ++/** ++ * gtk_entry_set_attributes: ++ * @entry: a #GtkEntry ++ * @attrs: a #PangoAttrList ++ * ++ * Sets a #PangoAttrList; the attributes in the list are applied to the ++ * entry text. ++ * ++ * Since: 3.6 ++ */ ++void ++gtk_entry_set_attributes (GtkEntry *entry, ++ PangoAttrList *attrs) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ if (attrs) ++ pango_attr_list_ref (attrs); ++ ++ if (priv->attrs) ++ pango_attr_list_unref (priv->attrs); ++ priv->attrs = attrs; ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ATTRIBUTES]); ++ ++ gtk_entry_recompute (entry); ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++} ++ ++/** ++ * gtk_entry_get_attributes: ++ * @entry: a #GtkEntry ++ * ++ * Gets the attribute list that was set on the entry using ++ * gtk_entry_set_attributes(), if any. ++ * ++ * Returns: (transfer none) (nullable): the attribute list, or %NULL ++ * if none was set. ++ * ++ * Since: 3.6 ++ */ ++PangoAttrList * ++gtk_entry_get_attributes (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ return entry->priv->attrs; ++} ++ ++/** ++ * gtk_entry_set_tabs: ++ * @entry: a #GtkEntry ++ * @tabs: a #PangoTabArray ++ * ++ * Sets a #PangoTabArray; the tabstops in the array are applied to the entry ++ * text. ++ * ++ * Since: 3.10 ++ */ ++ ++void ++gtk_entry_set_tabs (GtkEntry *entry, ++ PangoTabArray *tabs) ++{ ++ GtkEntryPrivate *priv; ++ g_return_if_fail (GTK_IS_ENTRY (entry)); ++ ++ priv = entry->priv; ++ if (priv->tabs) ++ pango_tab_array_free(priv->tabs); ++ ++ if (tabs) ++ priv->tabs = pango_tab_array_copy (tabs); ++ else ++ priv->tabs = NULL; ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_TABS]); ++ ++ gtk_entry_recompute (entry); ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++} ++ ++/** ++ * gtk_entry_get_tabs: ++ * @entry: a #GtkEntry ++ * ++ * Gets the tabstops that were set on the entry using gtk_entry_set_tabs(), if ++ * any. ++ * ++ * Returns: (nullable) (transfer none): the tabstops, or %NULL if none was set. ++ * ++ * Since: 3.10 ++ */ ++ ++PangoTabArray * ++gtk_entry_get_tabs (GtkEntry *entry) ++{ ++ g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); ++ ++ return entry->priv->tabs; ++} ++ ++static void ++gtk_entry_insert_emoji (GtkEntry *entry) ++{ ++ GtkWidget *chooser; ++ GdkRectangle rect; ++ ++ if (gtk_entry_get_input_hints (entry) & GTK_INPUT_HINT_NO_EMOJI) ++ return; ++ ++ if (gtk_widget_get_ancestor (GTK_WIDGET (entry), GTK_TYPE_EMOJI_CHOOSER) != NULL) ++ return; ++ ++ chooser = GTK_WIDGET (g_object_get_data (G_OBJECT (entry), "gtk-emoji-chooser")); ++ if (!chooser) ++ { ++ chooser = gtk_emoji_chooser_new (); ++ g_object_set_data (G_OBJECT (entry), "gtk-emoji-chooser", chooser); ++ ++ gtk_popover_set_relative_to (GTK_POPOVER (chooser), GTK_WIDGET (entry)); ++ if (entry->priv->show_emoji_icon) ++ { ++ gtk_entry_get_icon_area (entry, GTK_ENTRY_ICON_SECONDARY, &rect); ++ gtk_popover_set_pointing_to (GTK_POPOVER (chooser), &rect); ++ } ++ g_signal_connect_swapped (chooser, "emoji-picked", G_CALLBACK (gtk_entry_enter_text), entry); ++ } ++ ++ gtk_popover_popup (GTK_POPOVER (chooser)); ++} ++ ++static void ++pick_emoji (GtkEntry *entry, ++ int icon, ++ GdkEvent *event, ++ gpointer data) ++{ ++ if (icon == GTK_ENTRY_ICON_SECONDARY) ++ gtk_entry_insert_emoji (entry); ++} ++ ++static void ++set_show_emoji_icon (GtkEntry *entry, ++ gboolean value) ++{ ++ GtkEntryPrivate *priv = entry->priv; ++ ++ if (priv->show_emoji_icon == value) ++ return; ++ ++ priv->show_emoji_icon = value; ++ ++ if (priv->show_emoji_icon) ++ { ++ gtk_entry_set_icon_from_icon_name (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ "face-smile-symbolic"); ++ ++ gtk_entry_set_icon_sensitive (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ TRUE); ++ ++ gtk_entry_set_icon_activatable (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ TRUE); ++ ++ gtk_entry_set_icon_tooltip_text (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ _("Insert Emoji")); ++ ++ g_signal_connect (entry, "icon-press", G_CALLBACK (pick_emoji), NULL); ++ } ++ else ++ { ++ g_signal_handlers_disconnect_by_func (entry, pick_emoji, NULL); ++ ++ gtk_entry_set_icon_from_icon_name (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ NULL); ++ ++ gtk_entry_set_icon_tooltip_text (entry, ++ GTK_ENTRY_ICON_SECONDARY, ++ NULL); ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_SHOW_EMOJI_ICON]); ++ gtk_widget_queue_resize (GTK_WIDGET (entry)); ++} ++ ++static void ++set_enable_emoji_completion (GtkEntry *entry, ++ gboolean value) ++{ ++ GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); ++ ++ if (priv->enable_emoji_completion == value) ++ return; ++ ++ priv->enable_emoji_completion = value; ++ ++ if (priv->enable_emoji_completion) ++ g_object_set_data (G_OBJECT (entry), "emoji-completion-popup", ++ gtk_emoji_completion_new (entry)); ++ else ++ g_object_set_data (G_OBJECT (entry), "emoji-completion-popup", NULL); ++ ++ g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ENABLE_EMOJI_COMPLETION]); ++} +diff -urN '--exclude=.git' a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c +--- a/gtk/gtkfilechooserentry.c 2025-06-09 20:05:32.319562751 -0700 ++++ b/gtk/gtkfilechooserentry.c 2025-06-09 20:06:00.215830290 -0700 +@@ -524,6 +524,10 @@ + (state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) + return FALSE; + ++ if (gtk_get_current_event_state (&state) && ++ (state & GDK_SUPER_MASK) == GDK_SUPER_MASK) ++ return FALSE; ++ + /* This is a bit evil -- it makes Tab never leave the entry. It basically + * makes it 'safe' for people to hit. */ + gtk_editable_get_selection_bounds (editable, &start, &end); +diff -urN '--exclude=.git' a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c +--- a/gtk/gtkfilechooserwidget.c 2025-06-09 20:05:32.323562788 -0700 ++++ b/gtk/gtkfilechooserwidget.c 2025-06-09 20:06:00.219830328 -0700 +@@ -8606,21 +8606,21 @@ + binding_set = gtk_binding_set_by_class (class); + + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_l, GDK_CONTROL_MASK, ++ GDK_KEY_l, GDK_SUPER_MASK, + "location-toggle-popup", + 0); + + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_v, GDK_CONTROL_MASK, ++ GDK_KEY_v, GDK_SUPER_MASK, + "location-popup-on-paste", + 0); + + add_normal_and_shifted_binding (binding_set, +- GDK_KEY_Up, GDK_MOD1_MASK, ++ GDK_KEY_Up, GDK_SUPER_MASK, + "up-folder"); + + add_normal_and_shifted_binding (binding_set, +- GDK_KEY_KP_Up, GDK_MOD1_MASK, ++ GDK_KEY_KP_Up, GDK_SUPER_MASK, + "up-folder"); + + add_normal_and_shifted_binding (binding_set, +@@ -8631,6 +8631,10 @@ + "down-folder"); + + gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_h, GDK_SHIFT_MASK | GDK_SUPER_MASK, ++ "home-folder", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, + GDK_KEY_Home, GDK_MOD1_MASK, + "home-folder", + 0); +@@ -8639,27 +8643,23 @@ + "home-folder", + 0); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_d, GDK_MOD1_MASK, ++ GDK_KEY_d, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "desktop-folder", + 0); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_h, GDK_CONTROL_MASK, ++ GDK_KEY_h, GDK_SUPER_MASK, + "show-hidden", + 0); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_s, GDK_MOD1_MASK, +- "search-shortcut", +- 0); +- gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_f, GDK_CONTROL_MASK, ++ GDK_KEY_f, GDK_SUPER_MASK, + "search-shortcut", + 0); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_r, GDK_MOD1_MASK, ++ GDK_KEY_r, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "recent-shortcut", + 0); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_p, GDK_MOD1_MASK, ++ GDK_KEY_p, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "places-shortcut", + 0); + +diff -urN '--exclude=.git' a/gtk/gtkfilechooserwidget.c.orig b/gtk/gtkfilechooserwidget.c.orig +--- a/gtk/gtkfilechooserwidget.c.orig 1969-12-31 16:00:00.000000000 -0800 ++++ b/gtk/gtkfilechooserwidget.c.orig 2025-06-09 20:05:43.719672101 -0700 +@@ -0,0 +1,9055 @@ ++/* -*- Mode: C; c-file-style: "gnu"; tab-width: 8 -*- */ ++/* GTK - The GIMP Toolkit ++ * gtkfilechooserwidget.c: Embeddable file selector widget ++ * Copyright (C) 2003, Red Hat, Inc. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library. If not, see . ++ */ ++ ++#include "config.h" ++ ++#include "gtkfilechooserwidget.h" ++#include "gtkfilechooserwidgetprivate.h" ++ ++#include "gtkaccessible.h" ++#include "gtkbindings.h" ++#include "gtkbutton.h" ++#include "gtkcelllayout.h" ++#include "gtkcellrendererpixbuf.h" ++#include "gtkcellrenderertext.h" ++#include "gtkcheckmenuitem.h" ++#include "gtkclipboard.h" ++#include "gtkcomboboxtext.h" ++#include "gtkdragsource.h" ++#include "gtkdragdest.h" ++#include "gtkentry.h" ++#include "gtkfilechooserprivate.h" ++#include "gtkfilechooserdialog.h" ++#include "gtkfilechooserembed.h" ++#include "gtkfilechooserentry.h" ++#include "gtkfilechooserutils.h" ++#include "gtkfilechooser.h" ++#include "gtkfilesystem.h" ++#include "gtkfilesystemmodel.h" ++#include "gtkgrid.h" ++#include "gtkicontheme.h" ++#include "gtklabel.h" ++#include "gtkmarshalers.h" ++#include "gtkmessagedialog.h" ++#include "gtkmountoperation.h" ++#include "gtkpaned.h" ++#include "gtkpathbar.h" ++#include "gtkplacessidebar.h" ++#include "gtkplacessidebarprivate.h" ++#include "gtkplacesviewprivate.h" ++#include "gtkprivate.h" ++#include "gtkrecentmanager.h" ++#include "gtksearchentry.h" ++#include "gtkseparatormenuitem.h" ++#include "gtksettings.h" ++#include "gtksizegroup.h" ++#include "gtksizerequest.h" ++#include "gtkstack.h" ++#include "gtktooltip.h" ++#include "gtktreednd.h" ++#include "gtktreeprivate.h" ++#include "gtktreeselection.h" ++#include "gtkbox.h" ++#include "gtkcheckbutton.h" ++#include "gtkwindowgroup.h" ++#include "gtkintl.h" ++#include "a11y/gtkfilechooserwidgetaccessible.h" ++#include "gtkshow.h" ++#include "gtkmain.h" ++#include "gtkscrollable.h" ++#include "gtkpopover.h" ++#include "gtkpopoverprivate.h" ++#include "gtkrevealer.h" ++#include "gtkspinner.h" ++#include "gtkseparator.h" ++#include "gtkmodelbutton.h" ++#include "gtkgesturelongpress.h" ++ ++#include ++ ++#ifdef HAVE_UNISTD_H ++#include ++#endif ++#ifdef G_OS_WIN32 ++#include ++#endif ++ ++/** ++ * SECTION:gtkfilechooserwidget ++ * @Short_description: A file chooser widget ++ * @Title: GtkFileChooserWidget ++ * @See_also: #GtkFileChooserDialog ++ * ++ * #GtkFileChooserWidget is a widget for choosing files. ++ * It exposes the #GtkFileChooser interface, and you should ++ * use the methods of this interface to interact with the ++ * widget. ++ * ++ * # CSS nodes ++ * ++ * GtkFileChooserWidget has a single CSS node with name filechooser. ++ */ ++ ++ ++/* Values for GtkSelection-related "info" fields */ ++#define SELECTION_TEXT 0 ++#define SELECTION_URI 1 ++ ++/* 150 mseconds of delay */ ++#define LOCATION_CHANGED_TIMEOUT 150 ++ ++/* Profiling stuff */ ++#undef PROFILE_FILE_CHOOSER ++#ifdef PROFILE_FILE_CHOOSER ++ ++ ++#ifndef F_OK ++#define F_OK 0 ++#endif ++ ++#define PROFILE_INDENT 4 ++ ++static int profile_indent; ++ ++static void ++profile_add_indent (int indent) ++{ ++ profile_indent += indent; ++ if (profile_indent < 0) ++ g_error ("You screwed up your indentation"); ++} ++ ++static void ++_gtk_file_chooser_profile_log (const char *func, int indent, const char *msg1, const char *msg2) ++{ ++ char *str; ++ ++ if (indent < 0) ++ profile_add_indent (indent); ++ ++ if (profile_indent == 0) ++ str = g_strdup_printf ("MARK: %s %s %s", func ? func : "", msg1 ? msg1 : "", msg2 ? msg2 : ""); ++ else ++ str = g_strdup_printf ("MARK: %*c %s %s %s", profile_indent - 1, ' ', func ? func : "", msg1 ? msg1 : "", msg2 ? msg2 : ""); ++ ++ access (str, F_OK); ++ g_free (str); ++ ++ if (indent > 0) ++ profile_add_indent (indent); ++} ++ ++#define profile_start(x, y) _gtk_file_chooser_profile_log (G_STRFUNC, PROFILE_INDENT, x, y) ++#define profile_end(x, y) _gtk_file_chooser_profile_log (G_STRFUNC, -PROFILE_INDENT, x, y) ++#define profile_msg(x, y) _gtk_file_chooser_profile_log (NULL, 0, x, y) ++#else ++#define profile_start(x, y) ++#define profile_end(x, y) ++#define profile_msg(x, y) ++#endif ++ ++enum { ++ PROP_SEARCH_MODE = 1, ++ PROP_SUBTITLE ++}; ++ ++typedef enum { ++ LOAD_EMPTY, /* There is no model */ ++ LOAD_PRELOAD, /* Model is loading and a timer is running; model isn't inserted into the tree yet */ ++ LOAD_LOADING, /* Timeout expired, model is inserted into the tree, but not fully loaded yet */ ++ LOAD_FINISHED /* Model is fully loaded and inserted into the tree */ ++} LoadState; ++ ++typedef enum { ++ RELOAD_EMPTY, /* No folder has been set */ ++ RELOAD_HAS_FOLDER /* We have a folder, although it may not be completely loaded yet; no need to reload */ ++} ReloadState; ++ ++typedef enum { ++ LOCATION_MODE_PATH_BAR, ++ LOCATION_MODE_FILENAME_ENTRY ++} LocationMode; ++ ++typedef enum { ++ OPERATION_MODE_BROWSE, ++ OPERATION_MODE_SEARCH, ++ OPERATION_MODE_ENTER_LOCATION, ++ OPERATION_MODE_OTHER_LOCATIONS, ++ OPERATION_MODE_RECENT ++} OperationMode; ++ ++typedef enum { ++ STARTUP_MODE_RECENT, ++ STARTUP_MODE_CWD ++} StartupMode; ++ ++typedef enum { ++ CLOCK_FORMAT_24, ++ CLOCK_FORMAT_12 ++} ClockFormat; ++ ++typedef enum { ++ DATE_FORMAT_REGULAR, ++ DATE_FORMAT_WITH_TIME ++} DateFormat; ++ ++typedef enum { ++ TYPE_FORMAT_MIME, ++ TYPE_FORMAT_DESCRIPTION, ++ TYPE_FORMAT_CATEGORY ++} TypeFormat; ++ ++struct _GtkFileChooserWidgetPrivate { ++ GtkFileChooserAction action; ++ ++ GtkFileSystem *file_system; ++ ++ /* Save mode widgets */ ++ GtkWidget *save_widgets; ++ GtkWidget *save_widgets_table; ++ ++ /* The file browsing widgets */ ++ GtkWidget *browse_widgets_hpaned; ++ GtkWidget *browse_header_revealer; ++ GtkWidget *browse_header_stack; ++ GtkWidget *browse_files_stack; ++ GtkWidget *browse_files_swin; ++ GtkWidget *browse_files_tree_view; ++ GtkWidget *remote_warning_bar; ++ ++ GtkWidget *browse_files_popover; ++ GtkWidget *add_shortcut_item; ++ GtkWidget *hidden_files_item; ++ GtkWidget *size_column_item; ++ GtkWidget *type_column_item; ++ GtkWidget *copy_file_location_item; ++ GtkWidget *visit_file_item; ++ GtkWidget *open_folder_item; ++ GtkWidget *rename_file_item; ++ GtkWidget *trash_file_item; ++ GtkWidget *delete_file_item; ++ GtkWidget *sort_directories_item; ++ GtkWidget *show_time_item; ++ ++ GtkWidget *browse_new_folder_button; ++ GtkSizeGroup *browse_path_bar_size_group; ++ GtkWidget *browse_path_bar; ++ GtkWidget *new_folder_name_entry; ++ GtkWidget *new_folder_create_button; ++ GtkWidget *new_folder_error_label; ++ GtkWidget *new_folder_popover; ++ GtkWidget *rename_file_name_entry; ++ GtkWidget *rename_file_rename_button; ++ GtkWidget *rename_file_error_label; ++ GtkWidget *rename_file_popover; ++ GFile *rename_file_source_file; ++ ++ GtkGesture *long_press_gesture; ++ ++ GtkFileSystemModel *browse_files_model; ++ char *browse_files_last_selected_name; ++ ++ GtkWidget *places_sidebar; ++ GtkWidget *places_view; ++ StartupMode startup_mode; ++ ++ /* OPERATION_MODE_SEARCH */ ++ GtkWidget *search_entry; ++ GtkWidget *search_spinner; ++ guint show_progress_timeout; ++ GtkSearchEngine *search_engine; ++ GtkQuery *search_query; ++ GtkFileSystemModel *search_model; ++ GtkFileSystemModel *model_for_search; ++ ++ /* OPERATION_MODE_RECENT */ ++ GtkRecentManager *recent_manager; ++ GtkFileSystemModel *recent_model; ++ guint load_recent_id; ++ ++ GtkWidget *extra_and_filters; ++ GtkWidget *filter_combo_hbox; ++ GtkWidget *filter_combo; ++ GtkWidget *preview_box; ++ GtkWidget *preview_label; ++ GtkWidget *preview_widget; ++ GtkWidget *extra_align; ++ GtkWidget *extra_widget; ++ ++ GtkWidget *location_entry_box; ++ GtkWidget *location_entry; ++ LocationMode location_mode; ++ ++ GtkWidget *external_entry; ++ ++ GtkWidget *choice_box; ++ GHashTable *choices; ++ ++ /* Handles */ ++ GCancellable *file_list_drag_data_received_cancellable; ++ GCancellable *update_current_folder_cancellable; ++ GCancellable *should_respond_get_info_cancellable; ++ GCancellable *file_exists_get_info_cancellable; ++ ++ LoadState load_state; ++ ReloadState reload_state; ++ guint load_timeout_id; ++ ++ OperationMode operation_mode; ++ ++ GSList *pending_select_files; ++ ++ GtkFileFilter *current_filter; ++ GSList *filters; ++ ++ GtkBookmarksManager *bookmarks_manager; ++ ++ int num_volumes; ++ int num_shortcuts; ++ int num_bookmarks; ++ ++ gulong volumes_changed_id; ++ gulong bookmarks_changed_id; ++ ++ GFile *current_volume_file; ++ GFile *current_folder; ++ GFile *preview_file; ++ char *preview_display_name; ++ GFile *renamed_file; ++ ++ GtkTreeViewColumn *list_name_column; ++ GtkCellRenderer *list_name_renderer; ++ GtkCellRenderer *list_pixbuf_renderer; ++ GtkTreeViewColumn *list_time_column; ++ GtkCellRenderer *list_date_renderer; ++ GtkCellRenderer *list_time_renderer; ++ GtkTreeViewColumn *list_size_column; ++ GtkCellRenderer *list_size_renderer; ++ GtkTreeViewColumn *list_type_column; ++ GtkCellRenderer *list_type_renderer; ++ GtkTreeViewColumn *list_location_column; ++ GtkCellRenderer *list_location_renderer; ++ ++ guint location_changed_id; ++ ++ gulong settings_signal_id; ++ int icon_size; ++ ++ GSource *focus_entry_idle; ++ ++ gulong toplevel_set_focus_id; ++ GtkWidget *toplevel_last_focus_widget; ++ ++ gint sort_column; ++ GtkSortType sort_order; ++ ++ TypeFormat type_format; ++ ++ /* Flags */ ++ ++ guint local_only : 1; ++ guint preview_widget_active : 1; ++ guint use_preview_label : 1; ++ guint select_multiple : 1; ++ guint show_hidden : 1; ++ guint show_hidden_set : 1; ++ guint sort_directories_first : 1; ++ guint show_time : 1; ++ guint do_overwrite_confirmation : 1; ++ guint list_sort_ascending : 1; ++ guint shortcuts_current_folder_active : 1; ++ guint show_size_column : 1; ++ guint show_type_column : 1; ++ guint create_folders : 1; ++ guint auto_selecting_first_row : 1; ++ guint browse_files_interaction_frozen : 1; ++}; ++ ++#define MAX_LOADING_TIME 500 ++ ++#define DEFAULT_NEW_FOLDER_NAME _("Type name of new folder") ++ ++/* Signal IDs */ ++enum { ++ LOCATION_POPUP, ++ LOCATION_POPUP_ON_PASTE, ++ UP_FOLDER, ++ DOWN_FOLDER, ++ HOME_FOLDER, ++ DESKTOP_FOLDER, ++ QUICK_BOOKMARK, ++ LOCATION_TOGGLE_POPUP, ++ SHOW_HIDDEN, ++ SEARCH_SHORTCUT, ++ RECENT_SHORTCUT, ++ PLACES_SHORTCUT, ++ ++ LAST_SIGNAL ++}; ++ ++static guint signals[LAST_SIGNAL] = { 0 }; ++ ++#define MODEL_ATTRIBUTES "standard::name,standard::type,standard::display-name," \ ++ "standard::is-hidden,standard::is-backup,standard::size," \ ++ "standard::content-type,standard::fast-content-type,time::modified,time::access," \ ++ "access::can-rename,access::can-delete,access::can-trash," \ ++ "standard::target-uri" ++enum { ++ /* the first 4 must be these due to settings caching sort column */ ++ MODEL_COL_NAME, ++ MODEL_COL_SIZE, ++ MODEL_COL_TYPE, ++ MODEL_COL_TIME, ++ MODEL_COL_FILE, ++ MODEL_COL_NAME_COLLATED, ++ MODEL_COL_IS_FOLDER, ++ MODEL_COL_IS_SENSITIVE, ++ MODEL_COL_SURFACE, ++ MODEL_COL_SIZE_TEXT, ++ MODEL_COL_DATE_TEXT, ++ MODEL_COL_TIME_TEXT, ++ MODEL_COL_LOCATION_TEXT, ++ MODEL_COL_ELLIPSIZE, ++ MODEL_COL_NUM_COLUMNS ++}; ++ ++/* This list of types is passed to _gtk_file_system_model_new*() */ ++#define MODEL_COLUMN_TYPES \ ++ MODEL_COL_NUM_COLUMNS, \ ++ G_TYPE_STRING, /* MODEL_COL_NAME */ \ ++ G_TYPE_INT64, /* MODEL_COL_SIZE */ \ ++ G_TYPE_STRING, /* MODEL_COL_TYPE */ \ ++ G_TYPE_LONG, /* MODEL_COL_TIME */ \ ++ G_TYPE_FILE, /* MODEL_COL_FILE */ \ ++ G_TYPE_STRING, /* MODEL_COL_NAME_COLLATED */ \ ++ G_TYPE_BOOLEAN, /* MODEL_COL_IS_FOLDER */ \ ++ G_TYPE_BOOLEAN, /* MODEL_COL_IS_SENSITIVE */ \ ++ CAIRO_GOBJECT_TYPE_SURFACE, /* MODEL_COL_SURFACE */ \ ++ G_TYPE_STRING, /* MODEL_COL_SIZE_TEXT */ \ ++ G_TYPE_STRING, /* MODEL_COL_DATE_TEXT */ \ ++ G_TYPE_STRING, /* MODEL_COL_TIME_TEXT */ \ ++ G_TYPE_STRING, /* MODEL_COL_LOCATION_TEXT */ \ ++ PANGO_TYPE_ELLIPSIZE_MODE /* MODEL_COL_ELLIPSIZE */ ++ ++#define DEFAULT_RECENT_FILES_LIMIT 50 ++ ++/* Icon size for if we can't get it from the theme */ ++#define FALLBACK_ICON_SIZE 16 ++ ++#define PREVIEW_HBOX_SPACING 12 ++#define NUM_LINES 45 ++#define NUM_CHARS 60 ++ ++static void gtk_file_chooser_widget_iface_init (GtkFileChooserIface *iface); ++static void gtk_file_chooser_embed_default_iface_init (GtkFileChooserEmbedIface *iface); ++ ++static void gtk_file_chooser_widget_constructed (GObject *object); ++static void gtk_file_chooser_widget_finalize (GObject *object); ++static void gtk_file_chooser_widget_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec); ++static void gtk_file_chooser_widget_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec); ++static void gtk_file_chooser_widget_dispose (GObject *object); ++static void gtk_file_chooser_widget_show_all (GtkWidget *widget); ++static void gtk_file_chooser_widget_realize (GtkWidget *widget); ++static void gtk_file_chooser_widget_map (GtkWidget *widget); ++static void gtk_file_chooser_widget_unmap (GtkWidget *widget); ++static void gtk_file_chooser_widget_hierarchy_changed (GtkWidget *widget, ++ GtkWidget *previous_toplevel); ++static void gtk_file_chooser_widget_style_updated (GtkWidget *widget); ++static void gtk_file_chooser_widget_screen_changed (GtkWidget *widget, ++ GdkScreen *previous_screen); ++static gboolean gtk_file_chooser_widget_key_press_event (GtkWidget *widget, ++ GdkEventKey *event); ++ ++static gboolean gtk_file_chooser_widget_set_current_folder (GtkFileChooser *chooser, ++ GFile *folder, ++ GError **error); ++static gboolean gtk_file_chooser_widget_update_current_folder (GtkFileChooser *chooser, ++ GFile *folder, ++ gboolean keep_trail, ++ gboolean clear_entry, ++ GError **error); ++static GFile * gtk_file_chooser_widget_get_current_folder (GtkFileChooser *chooser); ++static void gtk_file_chooser_widget_set_current_name (GtkFileChooser *chooser, ++ const gchar *name); ++static gchar * gtk_file_chooser_widget_get_current_name (GtkFileChooser *chooser); ++static gboolean gtk_file_chooser_widget_select_file (GtkFileChooser *chooser, ++ GFile *file, ++ GError **error); ++static void gtk_file_chooser_widget_unselect_file (GtkFileChooser *chooser, ++ GFile *file); ++static void gtk_file_chooser_widget_select_all (GtkFileChooser *chooser); ++static void gtk_file_chooser_widget_unselect_all (GtkFileChooser *chooser); ++static GSList * gtk_file_chooser_widget_get_files (GtkFileChooser *chooser); ++static GFile * gtk_file_chooser_widget_get_preview_file (GtkFileChooser *chooser); ++static GtkFileSystem *gtk_file_chooser_widget_get_file_system (GtkFileChooser *chooser); ++static void gtk_file_chooser_widget_add_filter (GtkFileChooser *chooser, ++ GtkFileFilter *filter); ++static void gtk_file_chooser_widget_remove_filter (GtkFileChooser *chooser, ++ GtkFileFilter *filter); ++static GSList * gtk_file_chooser_widget_list_filters (GtkFileChooser *chooser); ++static gboolean gtk_file_chooser_widget_add_shortcut_folder (GtkFileChooser *chooser, ++ GFile *file, ++ GError **error); ++static gboolean gtk_file_chooser_widget_remove_shortcut_folder (GtkFileChooser *chooser, ++ GFile *file, ++ GError **error); ++static GSList * gtk_file_chooser_widget_list_shortcut_folders (GtkFileChooser *chooser); ++ ++static void gtk_file_chooser_widget_get_default_size (GtkFileChooserEmbed *chooser_embed, ++ gint *default_width, ++ gint *default_height); ++static gboolean gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed); ++static void gtk_file_chooser_widget_initial_focus (GtkFileChooserEmbed *chooser_embed); ++ ++static void gtk_file_chooser_widget_add_choice (GtkFileChooser *chooser, ++ const char *id, ++ const char *label, ++ const char **options, ++ const char **option_labels); ++static void gtk_file_chooser_widget_remove_choice (GtkFileChooser *chooser, ++ const char *id); ++static void gtk_file_chooser_widget_set_choice (GtkFileChooser *chooser, ++ const char *id, ++ const char *option); ++static const char *gtk_file_chooser_widget_get_choice (GtkFileChooser *chooser, ++ const char *id); ++ ++ ++static void add_selection_to_recent_list (GtkFileChooserWidget *impl); ++ ++static void location_popup_handler (GtkFileChooserWidget *impl, ++ const gchar *path); ++static void location_popup_on_paste_handler (GtkFileChooserWidget *impl); ++static void location_toggle_popup_handler (GtkFileChooserWidget *impl); ++static void up_folder_handler (GtkFileChooserWidget *impl); ++static void down_folder_handler (GtkFileChooserWidget *impl); ++static void home_folder_handler (GtkFileChooserWidget *impl); ++static void desktop_folder_handler (GtkFileChooserWidget *impl); ++static void quick_bookmark_handler (GtkFileChooserWidget *impl, ++ gint bookmark_index); ++static void show_hidden_handler (GtkFileChooserWidget *impl); ++static void search_shortcut_handler (GtkFileChooserWidget *impl); ++static void recent_shortcut_handler (GtkFileChooserWidget *impl); ++static void places_shortcut_handler (GtkFileChooserWidget *impl); ++static void update_appearance (GtkFileChooserWidget *impl); ++ ++static void operation_mode_set (GtkFileChooserWidget *impl, OperationMode mode); ++static void location_mode_set (GtkFileChooserWidget *impl, LocationMode new_mode); ++ ++static void set_current_filter (GtkFileChooserWidget *impl, ++ GtkFileFilter *filter); ++static void check_preview_change (GtkFileChooserWidget *impl); ++ ++static void filter_combo_changed (GtkComboBox *combo_box, ++ GtkFileChooserWidget *impl); ++ ++static gboolean list_select_func (GtkTreeSelection *selection, ++ GtkTreeModel *model, ++ GtkTreePath *path, ++ gboolean path_currently_selected, ++ gpointer data); ++ ++static void list_selection_changed (GtkTreeSelection *tree_selection, ++ GtkFileChooserWidget *impl); ++static void list_row_activated (GtkTreeView *tree_view, ++ GtkTreePath *path, ++ GtkTreeViewColumn *column, ++ GtkFileChooserWidget *impl); ++static void list_cursor_changed (GtkTreeView *treeview, ++ GtkFileChooserWidget *impl); ++ ++static void path_bar_clicked (GtkPathBar *path_bar, ++ GFile *file, ++ GFile *child, ++ gboolean child_is_hidden, ++ GtkFileChooserWidget *impl); ++ ++static void update_cell_renderer_attributes (GtkFileChooserWidget *impl); ++ ++static void load_remove_timer (GtkFileChooserWidget *impl, LoadState new_load_state); ++static void browse_files_center_selected_row (GtkFileChooserWidget *impl); ++ ++static void location_switch_to_path_bar (GtkFileChooserWidget *impl); ++ ++static void stop_loading_and_clear_list_model (GtkFileChooserWidget *impl, ++ gboolean remove_from_treeview); ++ ++static GSList *get_selected_files (GtkFileChooserWidget *impl); ++static GSList *get_selected_infos (GtkFileChooserWidget *impl); ++ ++static void search_setup_widgets (GtkFileChooserWidget *impl); ++static void search_stop_searching (GtkFileChooserWidget *impl, ++ gboolean remove_query); ++static void search_clear_model (GtkFileChooserWidget *impl, ++ gboolean remove_from_treeview); ++static void search_entry_activate_cb (GtkFileChooserWidget *impl); ++static void search_entry_stop_cb (GtkFileChooserWidget *impl); ++static void settings_load (GtkFileChooserWidget *impl); ++ ++static void show_filters (GtkFileChooserWidget *impl, ++ gboolean show); ++ ++static gboolean recent_files_setting_is_enabled (GtkFileChooserWidget *impl); ++static void recent_start_loading (GtkFileChooserWidget *impl); ++static void recent_stop_loading (GtkFileChooserWidget *impl); ++static void recent_clear_model (GtkFileChooserWidget *impl, ++ gboolean remove_from_treeview); ++static gboolean recent_should_respond (GtkFileChooserWidget *impl); ++static void set_file_system_backend (GtkFileChooserWidget *impl); ++static void unset_file_system_backend (GtkFileChooserWidget *impl); ++ ++static void clear_model_cache (GtkFileChooserWidget *impl, ++ gint column); ++static void set_model_filter (GtkFileChooserWidget *impl, ++ GtkFileFilter *filter); ++static void switch_to_home_dir (GtkFileChooserWidget *impl); ++ ++ ++ ++G_DEFINE_TYPE_WITH_CODE (GtkFileChooserWidget, gtk_file_chooser_widget, GTK_TYPE_BOX, ++ G_ADD_PRIVATE (GtkFileChooserWidget) ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_FILE_CHOOSER, ++ gtk_file_chooser_widget_iface_init) ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_FILE_CHOOSER_EMBED, ++ gtk_file_chooser_embed_default_iface_init)); ++ ++static void ++gtk_file_chooser_widget_iface_init (GtkFileChooserIface *iface) ++{ ++ iface->select_file = gtk_file_chooser_widget_select_file; ++ iface->unselect_file = gtk_file_chooser_widget_unselect_file; ++ iface->select_all = gtk_file_chooser_widget_select_all; ++ iface->unselect_all = gtk_file_chooser_widget_unselect_all; ++ iface->get_files = gtk_file_chooser_widget_get_files; ++ iface->get_preview_file = gtk_file_chooser_widget_get_preview_file; ++ iface->get_file_system = gtk_file_chooser_widget_get_file_system; ++ iface->set_current_folder = gtk_file_chooser_widget_set_current_folder; ++ iface->get_current_folder = gtk_file_chooser_widget_get_current_folder; ++ iface->set_current_name = gtk_file_chooser_widget_set_current_name; ++ iface->get_current_name = gtk_file_chooser_widget_get_current_name; ++ iface->add_filter = gtk_file_chooser_widget_add_filter; ++ iface->remove_filter = gtk_file_chooser_widget_remove_filter; ++ iface->list_filters = gtk_file_chooser_widget_list_filters; ++ iface->add_shortcut_folder = gtk_file_chooser_widget_add_shortcut_folder; ++ iface->remove_shortcut_folder = gtk_file_chooser_widget_remove_shortcut_folder; ++ iface->list_shortcut_folders = gtk_file_chooser_widget_list_shortcut_folders; ++ iface->add_choice = gtk_file_chooser_widget_add_choice; ++ iface->remove_choice = gtk_file_chooser_widget_remove_choice; ++ iface->set_choice = gtk_file_chooser_widget_set_choice; ++ iface->get_choice = gtk_file_chooser_widget_get_choice; ++} ++ ++static void ++gtk_file_chooser_embed_default_iface_init (GtkFileChooserEmbedIface *iface) ++{ ++ iface->get_default_size = gtk_file_chooser_widget_get_default_size; ++ iface->should_respond = gtk_file_chooser_widget_should_respond; ++ iface->initial_focus = gtk_file_chooser_widget_initial_focus; ++} ++ ++static void ++pending_select_files_free (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_slist_free_full (priv->pending_select_files, g_object_unref); ++ priv->pending_select_files = NULL; ++} ++ ++static void ++pending_select_files_add (GtkFileChooserWidget *impl, ++ GFile *file) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ priv->pending_select_files = ++ g_slist_prepend (priv->pending_select_files, g_object_ref (file)); ++} ++ ++static void ++gtk_file_chooser_widget_finalize (GObject *object) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (object); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->choices) ++ g_hash_table_unref (priv->choices); ++ ++ if (priv->location_changed_id > 0) ++ g_source_remove (priv->location_changed_id); ++ ++ unset_file_system_backend (impl); ++ ++ g_free (priv->browse_files_last_selected_name); ++ ++ g_slist_free_full (priv->filters, g_object_unref); ++ ++ if (priv->current_filter) ++ g_object_unref (priv->current_filter); ++ ++ if (priv->current_volume_file) ++ g_object_unref (priv->current_volume_file); ++ ++ if (priv->current_folder) ++ g_object_unref (priv->current_folder); ++ ++ if (priv->preview_file) ++ g_object_unref (priv->preview_file); ++ ++ if (priv->browse_path_bar_size_group) ++ g_object_unref (priv->browse_path_bar_size_group); ++ ++ if (priv->renamed_file) ++ g_object_unref (priv->renamed_file); ++ ++ /* Free all the Models we have */ ++ stop_loading_and_clear_list_model (impl, FALSE); ++ search_clear_model (impl, FALSE); ++ recent_clear_model (impl, FALSE); ++ g_clear_object (&impl->priv->model_for_search); ++ ++ /* stopping the load above should have cleared this */ ++ g_assert (priv->load_timeout_id == 0); ++ ++ g_free (priv->preview_display_name); ++ ++ impl->priv = NULL; ++ ++ G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->finalize (object); ++} ++ ++/* Shows an error dialog set as transient for the specified window */ ++static void ++error_message_with_parent (GtkWindow *parent, ++ const char *msg, ++ const char *detail) ++{ ++ GtkWidget *dialog; ++ ++ dialog = gtk_message_dialog_new (parent, ++ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, ++ GTK_MESSAGE_ERROR, ++ GTK_BUTTONS_OK, ++ "%s", ++ msg); ++ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), ++ "%s", detail); ++ ++ if (parent && gtk_window_has_group (parent)) ++ gtk_window_group_add_window (gtk_window_get_group (parent), ++ GTK_WINDOW (dialog)); ++ ++ gtk_dialog_run (GTK_DIALOG (dialog)); ++ gtk_widget_destroy (dialog); ++} ++ ++/* Returns a toplevel GtkWindow, or NULL if none */ ++static GtkWindow * ++get_toplevel (GtkWidget *widget) ++{ ++ GtkWidget *toplevel; ++ ++ toplevel = gtk_widget_get_toplevel (widget); ++ if (!gtk_widget_is_toplevel (toplevel)) ++ return NULL; ++ else ++ return GTK_WINDOW (toplevel); ++} ++ ++/* Shows an error dialog for the file chooser */ ++static void ++error_message (GtkFileChooserWidget *impl, ++ const char *msg, ++ const char *detail) ++{ ++ error_message_with_parent (get_toplevel (GTK_WIDGET (impl)), msg, detail); ++} ++ ++/* Shows a simple error dialog relative to a path. Frees the GError as well. */ ++static void ++error_dialog (GtkFileChooserWidget *impl, ++ const char *msg, ++ GError *error) ++{ ++ if (error) ++ { ++ error_message (impl, msg, error->message); ++ g_error_free (error); ++ } ++} ++ ++/* Shows an error dialog about not being able to create a folder */ ++static void ++error_creating_folder_dialog (GtkFileChooserWidget *impl, ++ GFile *file, ++ GError *error) ++{ ++ error_dialog (impl, ++ _("The folder could not be created"), ++ error); ++} ++ ++/* Shows an error about not being able to create a folder because a file with ++ * the same name is already there. ++ */ ++static void ++error_creating_folder_over_existing_file_dialog (GtkFileChooserWidget *impl, ++ GFile *file) ++{ ++ error_message (impl, ++ _("The folder could not be created, as a file with the same " ++ "name already exists."), ++ _("Try using a different name for the folder, or rename the " ++ "file first.")); ++} ++ ++static void ++error_with_file_under_nonfolder (GtkFileChooserWidget *impl, ++ GFile *parent_file) ++{ ++ GError *error; ++ char *uri, *msg; ++ ++ error = NULL; ++ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY, ++ _("You need to choose a valid filename.")); ++ ++ uri = g_file_get_uri (parent_file); ++ msg = g_strdup_printf (_("Cannot create a file under %s as it is not a folder"), uri); ++ g_free (uri); ++ error_dialog (impl, msg, error); ++ g_free (msg); ++} ++ ++static void ++error_filename_to_long_dialog (GtkFileChooserWidget *impl) ++{ ++ error_message (impl, ++ _("Cannot create file as the filename is too long"), ++ _("Try using a shorter name.")); ++} ++ ++/* Shows an error about not being able to select a folder because a file with ++ * the same name is already there. ++ */ ++static void ++error_selecting_folder_over_existing_file_dialog (GtkFileChooserWidget *impl) ++{ ++ error_message (impl, ++ _("You may only select folders"), ++ _("The item that you selected is not a folder try using a different item.")); ++} ++ ++/* Shows an error dialog about not being able to create a filename */ ++static void ++error_building_filename_dialog (GtkFileChooserWidget *impl, ++ GError *error) ++{ ++ error_dialog (impl, _("Invalid file name"), error); ++} ++ ++/* Shows an error dialog when we cannot switch to a folder */ ++static void ++error_changing_folder_dialog (GtkFileChooserWidget *impl, ++ GFile *file, ++ GError *error) ++{ ++ error_dialog (impl, _("The folder contents could not be displayed"), error); ++} ++ ++static void ++error_deleting_file (GtkFileChooserWidget *impl, ++ GFile *file, ++ GError *error) ++{ ++ error_dialog (impl, _("The file could not be deleted"), error); ++} ++ ++static void ++error_trashing_file (GtkFileChooserWidget *impl, ++ GFile *file, ++ GError *error) ++{ ++ error_dialog (impl, _("The file could not be moved to the Trash"), error); ++} ++ ++/* Changes folders, displaying an error dialog if this fails */ ++static gboolean ++change_folder_and_display_error (GtkFileChooserWidget *impl, ++ GFile *file, ++ gboolean clear_entry) ++{ ++ GError *error; ++ gboolean result; ++ ++ g_return_val_if_fail (G_IS_FILE (file), FALSE); ++ ++ /* We copy the path because of this case: ++ * ++ * list_row_activated() ++ * fetches path from model; path belongs to the model (*) ++ * calls change_folder_and_display_error() ++ * calls gtk_file_chooser_set_current_folder_file() ++ * changing folders fails, sets model to NULL, thus freeing the path in (*) ++ */ ++ ++ error = NULL; ++ result = gtk_file_chooser_widget_update_current_folder (GTK_FILE_CHOOSER (impl), file, TRUE, clear_entry, &error); ++ ++ if (!result) ++ error_changing_folder_dialog (impl, file, error); ++ ++ return result; ++} ++ ++static void ++emit_default_size_changed (GtkFileChooserWidget *impl) ++{ ++ profile_msg (" emit default-size-changed start", NULL); ++ g_signal_emit_by_name (impl, "default-size-changed"); ++ profile_msg (" emit default-size-changed end", NULL); ++} ++ ++static void ++update_preview_widget_visibility (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->use_preview_label) ++ { ++ if (!priv->preview_label) ++ { ++ priv->preview_label = gtk_label_new (priv->preview_display_name); ++ gtk_box_pack_start (GTK_BOX (priv->preview_box), priv->preview_label, FALSE, FALSE, 0); ++ gtk_box_reorder_child (GTK_BOX (priv->preview_box), priv->preview_label, 0); ++ gtk_label_set_ellipsize (GTK_LABEL (priv->preview_label), PANGO_ELLIPSIZE_MIDDLE); ++ gtk_widget_show (priv->preview_label); ++ } ++ } ++ else ++ { ++ if (priv->preview_label) ++ { ++ gtk_widget_destroy (priv->preview_label); ++ priv->preview_label = NULL; ++ } ++ } ++ ++ if (priv->preview_widget_active && priv->preview_widget) ++ gtk_widget_show (priv->preview_box); ++ else ++ gtk_widget_hide (priv->preview_box); ++ ++ if (!gtk_widget_get_mapped (GTK_WIDGET (impl))) ++ emit_default_size_changed (impl); ++} ++ ++static void ++set_preview_widget (GtkFileChooserWidget *impl, ++ GtkWidget *preview_widget) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (preview_widget == priv->preview_widget) ++ return; ++ ++ if (priv->preview_widget) ++ gtk_container_remove (GTK_CONTAINER (priv->preview_box), ++ priv->preview_widget); ++ ++ priv->preview_widget = preview_widget; ++ if (priv->preview_widget) ++ { ++ gtk_widget_show (priv->preview_widget); ++ gtk_box_pack_start (GTK_BOX (priv->preview_box), priv->preview_widget, TRUE, TRUE, 0); ++ gtk_box_reorder_child (GTK_BOX (priv->preview_box), ++ priv->preview_widget, ++ (priv->use_preview_label && priv->preview_label) ? 1 : 0); ++ } ++ ++ update_preview_widget_visibility (impl); ++} ++ ++static void ++new_folder_popover_active (GtkWidget *button, ++ GParamSpec *pspec, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_entry_set_text (GTK_ENTRY (priv->new_folder_name_entry), ""); ++ gtk_widget_set_sensitive (priv->new_folder_create_button, FALSE); ++ gtk_label_set_text (GTK_LABEL (priv->new_folder_error_label), ""); ++} ++ ++struct FileExistsData ++{ ++ GtkFileChooserWidget *impl; ++ gboolean file_exists_and_is_not_folder; ++ GFile *parent_file; ++ GFile *file; ++ GtkWidget *error_label; ++ GtkWidget *button; ++}; ++ ++static void ++name_exists_get_info_cb (GCancellable *cancellable, ++ GFileInfo *info, ++ const GError *error, ++ gpointer user_data) ++{ ++ struct FileExistsData *data = user_data; ++ GtkFileChooserWidget *impl = data->impl; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (cancellable != priv->file_exists_get_info_cancellable) ++ goto out; ++ ++ priv->file_exists_get_info_cancellable = NULL; ++ ++ if (g_cancellable_is_cancelled (cancellable)) ++ goto out; ++ ++ if (info != NULL) ++ { ++ const gchar *msg; ++ ++ if (_gtk_file_info_consider_as_directory (info)) ++ msg = _("A folder with that name already exists"); ++ else ++ msg = _("A file with that name already exists"); ++ ++ gtk_widget_set_sensitive (data->button, FALSE); ++ gtk_label_set_text (GTK_LABEL (data->error_label), msg); ++ } ++ else ++ { ++ gtk_widget_set_sensitive (data->button, TRUE); ++ /* Don't clear the label here, it may contain a warning */ ++ } ++ ++out: ++ g_object_unref (impl); ++ g_object_unref (data->file); ++ g_free (data); ++ g_object_unref (cancellable); ++} ++ ++static void ++check_valid_child_name (GtkFileChooserWidget *impl, ++ GFile *parent, ++ const gchar *name, ++ gboolean is_folder, ++ GFile *original, ++ GtkWidget *error_label, ++ GtkWidget *button) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_widget_set_sensitive (button, FALSE); ++ ++ if (name[0] == '\0') ++ gtk_label_set_text (GTK_LABEL (error_label), ""); ++ else if (strcmp (name, ".") == 0) ++ gtk_label_set_text (GTK_LABEL (error_label), ++ is_folder ? _("A folder cannot be called “.”") ++ : _("A file cannot be called “.”")); ++ else if (strcmp (name, "..") == 0) ++ gtk_label_set_text (GTK_LABEL (error_label), ++ is_folder ? _("A folder cannot be called “..”") ++ : _("A file cannot be called “..”")); ++ else if (strchr (name, '/') != NULL) ++ gtk_label_set_text (GTK_LABEL (error_label), ++ is_folder ? _("Folder names cannot contain “/”") ++ : _("File names cannot contain “/”")); ++ else ++ { ++ GFile *file; ++ GError *error = NULL; ++ ++ gtk_label_set_text (GTK_LABEL (error_label), ""); ++ ++ file = g_file_get_child_for_display_name (parent, name, &error); ++ if (file == NULL) ++ { ++ gtk_label_set_text (GTK_LABEL (error_label), error->message); ++ g_error_free (error); ++ } ++ else if (original && g_file_equal (original, file)) ++ { ++ gtk_widget_set_sensitive (button, TRUE); ++ g_object_unref (file); ++ } ++ else ++ { ++ struct FileExistsData *data; ++ ++ /* Warn the user about questionable names that are technically valid */ ++ if (g_ascii_isspace (name[0])) ++ gtk_label_set_text (GTK_LABEL (error_label), ++ is_folder ? _("Folder names should not begin with a space") ++ : _("File names should not begin with a space")); ++ ++ else if (g_ascii_isspace (name[strlen (name) - 1])) ++ gtk_label_set_text (GTK_LABEL (error_label), ++ is_folder ? _("Folder names should not end with a space") ++ : _("File names should not end with a space")); ++ else if (name[0] == '.') ++ gtk_label_set_text (GTK_LABEL (error_label), ++ is_folder ? _("Folder names starting with a “.” are hidden") ++ : _("File names starting with a “.” are hidden")); ++ ++ data = g_new0 (struct FileExistsData, 1); ++ data->impl = g_object_ref (impl); ++ data->file = g_object_ref (file); ++ data->error_label = error_label; ++ data->button = button; ++ ++ if (priv->file_exists_get_info_cancellable) ++ g_cancellable_cancel (priv->file_exists_get_info_cancellable); ++ ++ priv->file_exists_get_info_cancellable = ++ _gtk_file_system_get_info (priv->file_system, ++ file, ++ "standard::type", ++ name_exists_get_info_cb, ++ data); ++ ++ g_object_unref (file); ++ } ++ } ++} ++ ++static void ++new_folder_name_changed (GtkEntry *entry, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ check_valid_child_name (impl, ++ priv->current_folder, ++ gtk_entry_get_text (entry), ++ TRUE, ++ NULL, ++ priv->new_folder_error_label, ++ priv->new_folder_create_button); ++} ++ ++static void ++new_folder_create_clicked (GtkButton *button, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GError *error = NULL; ++ GFile *file; ++ const gchar *name; ++ ++ name = gtk_entry_get_text (GTK_ENTRY (priv->new_folder_name_entry)); ++ file = g_file_get_child_for_display_name (priv->current_folder, name, &error); ++ ++ gtk_popover_popdown (GTK_POPOVER (priv->new_folder_popover)); ++ ++ if (file) ++ { ++ if (g_file_make_directory (file, NULL, &error)) ++ change_folder_and_display_error (impl, file, FALSE); ++ else ++ error_creating_folder_dialog (impl, file, error); ++ g_object_unref (file); ++ } ++ else ++ error_creating_folder_dialog (impl, file, error); ++} ++ ++struct selection_check_closure { ++ GtkFileChooserWidget *impl; ++ int num_selected; ++ gboolean all_files; ++ gboolean all_folders; ++}; ++ ++/* Used from gtk_tree_selection_selected_foreach() */ ++static void ++selection_check_foreach_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ struct selection_check_closure *closure; ++ gboolean is_folder; ++ GFile *file; ++ ++ gtk_tree_model_get (model, iter, ++ MODEL_COL_FILE, &file, ++ MODEL_COL_IS_FOLDER, &is_folder, ++ -1); ++ ++ if (file == NULL) ++ return; ++ ++ g_object_unref (file); ++ ++ closure = data; ++ closure->num_selected++; ++ ++ closure->all_folders = closure->all_folders && is_folder; ++ closure->all_files = closure->all_files && !is_folder; ++} ++ ++/* Checks whether the selected items in the file list are all files or all folders */ ++static void ++selection_check (GtkFileChooserWidget *impl, ++ gint *num_selected, ++ gboolean *all_files, ++ gboolean *all_folders) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ struct selection_check_closure closure; ++ GtkTreeSelection *selection; ++ ++ closure.impl = impl; ++ closure.num_selected = 0; ++ closure.all_files = TRUE; ++ closure.all_folders = TRUE; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, ++ selection_check_foreach_cb, ++ &closure); ++ ++ g_assert (closure.num_selected == 0 || !(closure.all_files && closure.all_folders)); ++ ++ if (num_selected) ++ *num_selected = closure.num_selected; ++ ++ if (all_files) ++ *all_files = closure.all_files; ++ ++ if (all_folders) ++ *all_folders = closure.all_folders; ++} ++ ++static gboolean ++file_is_recent_uri (GFile *file) ++{ ++ GFile *recent; ++ gboolean same; ++ ++ recent = g_file_new_for_uri ("recent:///"); ++ same = g_file_equal (file, recent); ++ g_object_unref (recent); ++ ++ return same; ++} ++ ++static void ++places_sidebar_open_location_cb (GtkPlacesSidebar *sidebar, ++ GFile *location, ++ GtkPlacesOpenFlags open_flags, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean clear_entry; ++ ++ /* In the Save modes, we want to preserve what the user typed in the filename ++ * entry, so that he may choose another folder without erasing his typed name. ++ */ ++ if (priv->location_entry ++ && !(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ++ || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) ++ clear_entry = TRUE; ++ else ++ clear_entry = FALSE; ++ ++ location_mode_set (impl, LOCATION_MODE_PATH_BAR); ++ ++ if (file_is_recent_uri (location)) ++ operation_mode_set (impl, OPERATION_MODE_RECENT); ++ else ++ change_folder_and_display_error (impl, location, clear_entry); ++} ++ ++/* Callback used when the places sidebar needs us to display an error message */ ++static void ++places_sidebar_show_error_message_cb (GtkPlacesSidebar *sidebar, ++ const char *primary, ++ const char *secondary, ++ GtkFileChooserWidget *impl) ++{ ++ error_message (impl, primary, secondary); ++} ++ ++static gboolean ++key_is_left_or_right (GdkEventKey *event) ++{ ++ guint modifiers; ++ ++ modifiers = gtk_accelerator_get_default_mod_mask (); ++ ++ return ((event->keyval == GDK_KEY_Right ++ || event->keyval == GDK_KEY_KP_Right ++ || event->keyval == GDK_KEY_Left ++ || event->keyval == GDK_KEY_KP_Left) ++ && (event->state & modifiers) == 0); ++} ++ ++static gboolean ++should_trigger_location_entry (GtkFileChooserWidget *impl, ++ GdkEventKey *event) ++{ ++ GdkModifierType no_text_input_mask; ++ ++ if (impl->priv->operation_mode == OPERATION_MODE_SEARCH) ++ return FALSE; ++ ++ no_text_input_mask = ++ gtk_widget_get_modifier_mask (GTK_WIDGET (impl), GDK_MODIFIER_INTENT_NO_TEXT_INPUT); ++ ++ if ((event->keyval == GDK_KEY_slash ++ || event->keyval == GDK_KEY_KP_Divide ++ || event->keyval == GDK_KEY_period ++#ifdef G_OS_UNIX ++ || event->keyval == GDK_KEY_asciitilde ++ || event->keyval == GDK_KEY_dead_tilde ++#endif ++ ) && !(event->state & no_text_input_mask)) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++/* Handles key press events on the file list, so that we can trap Enter to ++ * activate the default button on our own. Also, checks to see if “/” has been ++ * pressed. ++ */ ++static gboolean ++browse_files_key_press_event_cb (GtkWidget *widget, ++ GdkEventKey *event, ++ gpointer data) ++{ ++ gchar *path; ++ GtkFileChooserWidget *impl = (GtkFileChooserWidget *) data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->browse_files_interaction_frozen) ++ return GDK_EVENT_STOP; ++ ++ if (should_trigger_location_entry (impl, event) && ++ (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)) ++ { ++ path = event->keyval == GDK_KEY_dead_tilde ? "~" : event->string; ++ location_popup_handler (impl, path); ++ return TRUE; ++ } ++ ++ if (key_is_left_or_right (event)) ++ { ++ if (gtk_widget_child_focus (priv->places_sidebar, GTK_DIR_LEFT)) ++ return TRUE; ++ } ++ ++ if ((event->keyval == GDK_KEY_Return ++ || event->keyval == GDK_KEY_ISO_Enter ++ || event->keyval == GDK_KEY_KP_Enter ++ || event->keyval == GDK_KEY_space ++ || event->keyval == GDK_KEY_KP_Space) ++ && !(event->state & gtk_accelerator_get_default_mod_mask ()) ++ && !(priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) ++ { ++ GtkWindow *window; ++ ++ window = get_toplevel (widget); ++ if (window) ++ { ++ GtkWidget *default_widget, *focus_widget; ++ ++ default_widget = gtk_window_get_default_widget (window); ++ focus_widget = gtk_window_get_focus (window); ++ ++ if (widget != default_widget && ++ !(widget == focus_widget && (!default_widget || !gtk_widget_get_sensitive (default_widget)))) ++ { ++ gtk_window_activate_default (window); ++ ++ return TRUE; ++ } ++ } ++ } ++ ++ if (event->keyval == GDK_KEY_Escape && ++ priv->operation_mode == OPERATION_MODE_SEARCH) ++ { ++ gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event); ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++static gboolean ++gtk_file_chooser_widget_key_press_event (GtkWidget *widget, ++ GdkEventKey *event) ++{ ++ GtkFileChooserWidget *impl = (GtkFileChooserWidget *) widget; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (should_trigger_location_entry (impl, event)) ++ { ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ { ++ location_popup_handler (impl, event->string); ++ return TRUE; ++ } ++ } ++ else if (gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event)) ++ { ++ if (priv->operation_mode != OPERATION_MODE_SEARCH) ++ operation_mode_set (impl, OPERATION_MODE_SEARCH); ++ return TRUE; ++ } ++ ++ if (GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->key_press_event (widget, event)) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++/* Callback used from gtk_tree_selection_selected_foreach(); adds a bookmark for ++ * each selected item in the file list. ++ */ ++static void ++add_bookmark_foreach_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = (GtkFileChooserWidget *) data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *file; ++ ++ gtk_tree_model_get (model, iter, ++ MODEL_COL_FILE, &file, ++ -1); ++ ++ _gtk_bookmarks_manager_insert_bookmark (priv->bookmarks_manager, file, 0, NULL); /* NULL-GError */ ++ ++ g_object_unref (file); ++} ++ ++/* Callback used when the "Add to Bookmarks" menu item is activated */ ++static void ++add_to_shortcuts_cb (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ ++ gtk_tree_selection_selected_foreach (selection, ++ add_bookmark_foreach_cb, ++ impl); ++} ++ ++static gboolean ++confirm_delete (GtkFileChooserWidget *impl, ++ GFileInfo *info) ++{ ++ GtkWindow *toplevel; ++ GtkWidget *dialog; ++ gint response; ++ const gchar *name; ++ ++ name = g_file_info_get_display_name (info); ++ ++ toplevel = get_toplevel (GTK_WIDGET (impl)); ++ ++ dialog = gtk_message_dialog_new (toplevel, ++ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, ++ GTK_MESSAGE_QUESTION, ++ GTK_BUTTONS_NONE, ++ _("Are you sure you want to permanently delete “%s”?"), ++ name); ++ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), ++ _("If you delete an item, it will be permanently lost.")); ++ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); ++ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Delete"), GTK_RESPONSE_ACCEPT); ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), ++ GTK_RESPONSE_ACCEPT, ++ GTK_RESPONSE_CANCEL, ++ -1); ++G_GNUC_END_IGNORE_DEPRECATIONS ++ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); ++ ++ if (gtk_window_has_group (toplevel)) ++ gtk_window_group_add_window (gtk_window_get_group (toplevel), GTK_WINDOW (dialog)); ++ ++ response = gtk_dialog_run (GTK_DIALOG (dialog)); ++ ++ gtk_widget_destroy (dialog); ++ ++ return (response == GTK_RESPONSE_ACCEPT); ++} ++ ++static void ++delete_selected_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GFile *file; ++ GFileInfo *info; ++ GError *error = NULL; ++ ++ file = _gtk_file_system_model_get_file (GTK_FILE_SYSTEM_MODEL (model), iter); ++ info = _gtk_file_system_model_get_info (GTK_FILE_SYSTEM_MODEL (model), iter); ++ ++ if (confirm_delete (impl, info)) ++ { ++ if (!g_file_delete (file, NULL, &error)) ++ error_deleting_file (impl, file, error); ++ } ++} ++ ++static void ++delete_file_cb (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, delete_selected_cb, impl); ++} ++ ++static void ++trash_selected_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GFile *file; ++ GError *error = NULL; ++ ++ file = _gtk_file_system_model_get_file (GTK_FILE_SYSTEM_MODEL (model), iter); ++ ++ if (!g_file_trash (file, NULL, &error)) ++ error_trashing_file (impl, file, error); ++} ++ ++ ++static void ++trash_file_cb (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, trash_selected_cb, impl); ++} ++ ++static void ++rename_file_name_changed (GtkEntry *entry, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFileType file_type; ++ ++ file_type = g_file_query_file_type (priv->rename_file_source_file, ++ G_FILE_QUERY_INFO_NONE, NULL); ++ ++ check_valid_child_name (impl, ++ priv->current_folder, ++ gtk_entry_get_text (entry), ++ file_type == G_FILE_TYPE_DIRECTORY, ++ priv->rename_file_source_file, ++ priv->rename_file_error_label, ++ priv->rename_file_rename_button); ++} ++ ++static void ++rename_file_end (GtkPopover *popover, ++ GtkFileChooserWidget *impl) ++{ ++ g_object_unref (impl->priv->rename_file_source_file); ++} ++ ++static void ++rename_file_rename_clicked (GtkButton *button, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *dest; ++ const gchar* new_name; ++ ++ gtk_popover_popdown (GTK_POPOVER (priv->rename_file_popover)); ++ ++ new_name = gtk_entry_get_text (GTK_ENTRY (priv->rename_file_name_entry)); ++ dest = g_file_get_parent (priv->rename_file_source_file); ++ ++ if (priv->renamed_file) ++ g_clear_object (&priv->renamed_file); ++ ++ if (dest) ++ { ++ GFile *child; ++ GError *error = NULL; ++ ++ child = g_file_get_child (dest, new_name); ++ if (child) ++ { ++ if (!g_file_move (priv->rename_file_source_file, child, G_FILE_COPY_NONE, ++ NULL, NULL, NULL, &error)) ++ error_dialog (impl, _("The file could not be renamed"), error); ++ else ++ { ++ /* Rename succeded, save renamed file so it will ++ * be revealed by our "row-changed" handler */ ++ priv->renamed_file = g_object_ref (child); ++ } ++ ++ g_object_unref (child); ++ } ++ ++ g_object_unref (dest); ++ } ++} ++ ++static void ++rename_selected_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GdkRectangle rect; ++ gchar *filename; ++ ++ gtk_tree_model_get (model, iter, ++ MODEL_COL_FILE, &priv->rename_file_source_file, ++ -1); ++ ++ gtk_tree_view_get_cell_area (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ path, priv->list_name_column, &rect); ++ ++ gtk_tree_view_convert_bin_window_to_widget_coords (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ rect.x, rect.y, &rect.x, &rect.y); ++ ++ filename = g_file_get_basename (priv->rename_file_source_file); ++ gtk_entry_set_text (GTK_ENTRY(priv->rename_file_name_entry), filename); ++ g_free (filename); ++ ++ gtk_popover_set_pointing_to (GTK_POPOVER (priv->rename_file_popover), &rect); ++ gtk_popover_popup (GTK_POPOVER (priv->rename_file_popover)); ++ gtk_widget_grab_focus (priv->rename_file_popover); ++} ++ ++static void ++rename_file_cb (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ GtkWidget *prev_default; ++ GtkWindow *window; ++ ++ prev_default = gtk_popover_get_prev_default (GTK_POPOVER (priv->browse_files_popover)); ++ if (prev_default) { ++ /* set 'default' early so rename popover can get it */ ++ window = GTK_WINDOW (gtk_widget_get_ancestor (priv->browse_files_popover, GTK_TYPE_WINDOW)); ++ if (window) ++ gtk_window_set_default (window, prev_default); ++ } ++ /* insensitive until we change the name */ ++ gtk_widget_set_sensitive (priv->rename_file_rename_button, FALSE); ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, rename_selected_cb, impl); ++} ++ ++/* callback used to set data to clipboard */ ++static void ++copy_file_get_cb (GtkClipboard *clipboard, ++ GtkSelectionData *selection_data, ++ guint info, ++ gpointer data) ++{ ++ GSList *selected_files = data; ++ ++ if (selected_files) ++ { ++ gint num_files = g_slist_length (selected_files); ++ gchar **uris; ++ gint i; ++ GSList *l; ++ ++ uris = g_new (gchar *, num_files + 1); ++ uris[num_files] = NULL; /* null terminator */ ++ ++ i = 0; ++ ++ for (l = selected_files; l; l = l->next) ++ { ++ GFile *file = (GFile *) l->data; ++ ++ if (info == SELECTION_URI) ++ uris[i] = g_file_get_uri (file); ++ else /* if (info == SELECTION_TEXT) - let this be the fallback */ ++ uris[i] = g_file_get_parse_name (file); ++ ++ i++; ++ } ++ ++ if (info == SELECTION_URI) ++ gtk_selection_data_set_uris (selection_data, uris); ++ else /* if (info == SELECTION_TEXT) - let this be the fallback */ ++ { ++ char *str = g_strjoinv (" ", uris); ++ gtk_selection_data_set_text (selection_data, str, -1); ++ g_free (str); ++ } ++ ++ g_strfreev (uris); ++ } ++} ++ ++/* callback used to clear the clipboard data */ ++static void ++copy_file_clear_cb (GtkClipboard *clipboard, ++ gpointer data) ++{ ++ GSList *selected_files = data; ++ ++ g_slist_free_full (selected_files, g_object_unref); ++} ++ ++/* Callback used when the "Copy file’s location" menu item is activated */ ++static void ++copy_file_location_cb (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GSList *selected_files = NULL; ++ ++ selected_files = get_selected_files (impl); ++ ++ if (selected_files) ++ { ++ GtkClipboard *clipboard; ++ GtkTargetList *target_list; ++ GtkTargetEntry *targets; ++ int n_targets; ++ ++ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (impl), GDK_SELECTION_CLIPBOARD); ++ ++ target_list = gtk_target_list_new (NULL, 0); ++ gtk_target_list_add_text_targets (target_list, SELECTION_TEXT); ++ gtk_target_list_add_uri_targets (target_list, SELECTION_URI); ++ ++ targets = gtk_target_table_new_from_list (target_list, &n_targets); ++ gtk_target_list_unref (target_list); ++ ++ gtk_clipboard_set_with_data (clipboard, targets, n_targets, ++ copy_file_get_cb, ++ copy_file_clear_cb, ++ selected_files); ++ ++ gtk_target_table_free (targets, n_targets); ++ } ++} ++ ++/* Callback used when the "Visit this file" menu item is activated */ ++static void ++visit_file_cb (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GSList *files; ++ ++ files = get_selected_files (impl); ++ ++ /* Sigh, just use the first one */ ++ if (files) ++ { ++ GFile *file = files->data; ++ ++ gtk_file_chooser_widget_select_file (GTK_FILE_CHOOSER (impl), file, NULL); /* NULL-GError */ ++ } ++ ++ g_slist_free_full (files, g_object_unref); ++} ++ ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++/* Callback used when the "Open this folder" menu item is activated */ ++static void ++open_folder_cb (GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GSList *files; ++ ++ files = get_selected_files (impl); ++ ++ /* Sigh, just use the first one */ ++ if (files) ++ { ++ GFile *file = files->data; ++ gchar *uri; ++ ++ uri = g_file_get_uri (file); ++ gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (impl)), uri, gtk_get_current_event_time (), NULL); ++ g_free (uri); ++ } ++ ++ g_slist_free_full (files, g_object_unref); ++} ++G_GNUC_END_IGNORE_DEPRECATIONS ++ ++/* callback used when the "Show Hidden Files" menu item is toggled */ ++static void ++change_show_hidden_state (GSimpleAction *action, ++ GVariant *state, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ ++ g_simple_action_set_state (action, state); ++ g_object_set (impl, "show-hidden", g_variant_get_boolean (state), NULL); ++} ++ ++/* Callback used when the "Show Size Column" menu item is toggled */ ++static void ++change_show_size_state (GSimpleAction *action, ++ GVariant *state, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_simple_action_set_state (action, state); ++ priv->show_size_column = g_variant_get_boolean (state); ++ ++ gtk_tree_view_column_set_visible (priv->list_size_column, ++ priv->show_size_column); ++} ++ ++/* Callback used when the "Show Type Column" menu item is toggled */ ++static void ++change_show_type_state (GSimpleAction *action, ++ GVariant *state, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_simple_action_set_state (action, state); ++ priv->show_type_column = g_variant_get_boolean (state); ++ ++ gtk_tree_view_column_set_visible (priv->list_type_column, ++ priv->show_type_column); ++} ++ ++static void ++change_sort_directories_first_state (GSimpleAction *action, ++ GVariant *state, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSortable *sortable; ++ ++ g_simple_action_set_state (action, state); ++ priv->sort_directories_first = g_variant_get_boolean (state); ++ ++ /* force resorting */ ++ sortable = GTK_TREE_SORTABLE (priv->browse_files_model); ++ if (sortable == NULL) ++ return; ++ ++ gtk_tree_sortable_set_sort_column_id (sortable, ++ GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, ++ priv->sort_order); ++ gtk_tree_sortable_set_sort_column_id (sortable, ++ priv->sort_column, ++ priv->sort_order); ++} ++ ++static void ++clear_model_cache (GtkFileChooserWidget *impl, ++ gint column) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->browse_files_model) ++ _gtk_file_system_model_clear_cache (priv->browse_files_model, column); ++ ++ if (priv->search_model) ++ _gtk_file_system_model_clear_cache (priv->search_model, column); ++ ++ if (priv->recent_model) ++ _gtk_file_system_model_clear_cache (priv->recent_model, column); ++} ++ ++static void ++set_model_filter (GtkFileChooserWidget *impl, ++ GtkFileFilter *filter) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->browse_files_model) ++ _gtk_file_system_model_set_filter (priv->browse_files_model, filter); ++ ++ if (priv->search_model) ++ _gtk_file_system_model_set_filter (priv->search_model, filter); ++ ++ if (priv->recent_model) ++ _gtk_file_system_model_set_filter (priv->recent_model, filter); ++} ++ ++static void ++update_time_renderer_visible (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_object_set (priv->list_time_renderer, ++ "visible", priv->show_time, ++ NULL); ++ clear_model_cache (impl, MODEL_COL_DATE_TEXT); ++ clear_model_cache (impl, MODEL_COL_TIME_TEXT); ++ gtk_widget_queue_draw (priv->browse_files_tree_view); ++} ++ ++static void ++change_show_time_state (GSimpleAction *action, ++ GVariant *state, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_simple_action_set_state (action, state); ++ priv->show_time = g_variant_get_boolean (state); ++ update_time_renderer_visible (impl); ++} ++ ++/* Shows an error dialog about not being able to select a dragged file */ ++static void ++error_selecting_dragged_file_dialog (GtkFileChooserWidget *impl, ++ GFile *file, ++ GError *error) ++{ ++ error_dialog (impl, ++ _("Could not select file"), ++ error); ++} ++ ++static void ++file_list_drag_data_select_uris (GtkFileChooserWidget *impl, ++ gchar **uris) ++{ ++ int i; ++ char *uri; ++ GtkFileChooser *chooser = GTK_FILE_CHOOSER (impl); ++ ++ for (i = 1; uris[i]; i++) ++ { ++ GFile *file; ++ GError *error = NULL; ++ ++ uri = uris[i]; ++ file = g_file_new_for_uri (uri); ++ ++ gtk_file_chooser_widget_select_file (chooser, file, &error); ++ if (error) ++ error_selecting_dragged_file_dialog (impl, file, error); ++ ++ g_object_unref (file); ++ } ++} ++ ++struct FileListDragData ++{ ++ GtkFileChooserWidget *impl; ++ gchar **uris; ++ GFile *file; ++}; ++ ++static void ++file_list_drag_data_received_get_info_cb (GCancellable *cancellable, ++ GFileInfo *info, ++ const GError *error, ++ gpointer user_data) ++{ ++ gboolean cancelled = g_cancellable_is_cancelled (cancellable); ++ struct FileListDragData *data = user_data; ++ GtkFileChooser *chooser = GTK_FILE_CHOOSER (data->impl); ++ GtkFileChooserWidgetPrivate *priv = data->impl->priv; ++ ++ if (cancellable != priv->file_list_drag_data_received_cancellable) ++ goto out; ++ ++ priv->file_list_drag_data_received_cancellable = NULL; ++ ++ if (cancelled || error) ++ goto out; ++ ++ if ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) && ++ data->uris[1] == 0 && !error && _gtk_file_info_consider_as_directory (info)) ++ change_folder_and_display_error (data->impl, data->file, FALSE); ++ else ++ { ++ GError *local_error = NULL; ++ ++ gtk_file_chooser_widget_unselect_all (chooser); ++ gtk_file_chooser_widget_select_file (chooser, data->file, &local_error); ++ if (local_error) ++ error_selecting_dragged_file_dialog (data->impl, data->file, local_error); ++ else ++ browse_files_center_selected_row (data->impl); ++ } ++ ++ if (priv->select_multiple) ++ file_list_drag_data_select_uris (data->impl, data->uris); ++ ++out: ++ g_object_unref (data->impl); ++ g_strfreev (data->uris); ++ g_object_unref (data->file); ++ g_free (data); ++ ++ g_object_unref (cancellable); ++} ++ ++static void ++file_list_drag_data_received_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ GtkSelectionData *selection_data, ++ guint info, ++ guint time_, ++ gpointer user_data) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (user_data); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gchar **uris; ++ char *uri; ++ GFile *file; ++ ++ /* Allow only drags from other widgets; see bug #533891. */ ++ if (gtk_drag_get_source_widget (context) == widget) ++ { ++ g_signal_stop_emission_by_name (widget, "drag-data-received"); ++ return; ++ } ++ ++ /* Parse the text/uri-list string, navigate to the first one */ ++ uris = gtk_selection_data_get_uris (selection_data); ++ if (uris && uris[0]) ++ { ++ struct FileListDragData *data; ++ ++ uri = uris[0]; ++ file = g_file_new_for_uri (uri); ++ ++ data = g_new0 (struct FileListDragData, 1); ++ data->impl = g_object_ref (impl); ++ data->uris = uris; ++ data->file = file; ++ ++ if (priv->file_list_drag_data_received_cancellable) ++ g_cancellable_cancel (priv->file_list_drag_data_received_cancellable); ++ ++ priv->file_list_drag_data_received_cancellable = ++ _gtk_file_system_get_info (priv->file_system, file, ++ "standard::type", ++ file_list_drag_data_received_get_info_cb, ++ data); ++ } ++ ++ g_signal_stop_emission_by_name (widget, "drag-data-received"); ++} ++ ++/* Don't do anything with the drag_drop signal */ ++static gboolean ++file_list_drag_drop_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time_, ++ GtkFileChooserWidget *impl) ++{ ++ g_signal_stop_emission_by_name (widget, "drag-drop"); ++ return TRUE; ++} ++ ++static void ++file_list_drag_begin_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ GtkFileChooserWidget *impl) ++{ ++ gtk_places_sidebar_set_drop_targets_visible (GTK_PLACES_SIDEBAR (impl->priv->places_sidebar), ++ TRUE, ++ context); ++} ++ ++/* Disable the normal tree drag motion handler, it makes it look like you're ++ dropping the dragged item onto a tree item */ ++static gboolean ++file_list_drag_motion_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time_, ++ GtkFileChooserWidget *impl) ++{ ++ g_signal_stop_emission_by_name (widget, "drag-motion"); ++ return TRUE; ++} ++ ++static void ++file_list_drag_end_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ gpointer user_data) ++{ ++ GtkFileChooserWidget *impl; ++ ++ impl = GTK_FILE_CHOOSER_WIDGET (user_data); ++ gtk_places_sidebar_set_drop_targets_visible (GTK_PLACES_SIDEBAR (impl->priv->places_sidebar), ++ FALSE, ++ context); ++} ++ ++/* Sensitizes the "Copy file’s location" and other context menu items if there is actually ++ * a selection active. ++ */ ++static void ++check_file_list_popover_sensitivity (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gint num_selected; ++ gboolean all_files; ++ gboolean all_folders; ++ gboolean active; ++ GActionGroup *actions; ++ GAction *action, *action2; ++ ++ actions = gtk_widget_get_action_group (priv->browse_files_tree_view, "item"); ++ ++ selection_check (impl, &num_selected, &all_files, &all_folders); ++ ++ active = (num_selected != 0); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "copy-location"); ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), active); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "add-shortcut"); ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), active && all_folders); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "visit"); ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), active); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "open"); ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (num_selected == 1) && all_folders); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "rename"); ++ if (num_selected == 1) ++ { ++ GSList *infos; ++ GFileInfo *info; ++ ++ infos = get_selected_infos (impl); ++ info = G_FILE_INFO (infos->data); ++ ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), ++ g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME)); ++ ++ g_slist_free_full (infos, g_object_unref); ++ } ++ else ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "delete"); ++ action2 = g_action_map_lookup_action (G_ACTION_MAP (actions), "trash"); ++ ++ if (num_selected == 1) ++ { ++ GSList *infos; ++ GFileInfo *info; ++ ++ infos = get_selected_infos (impl); ++ info = G_FILE_INFO (infos->data); ++ ++ if (g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH)) ++ { ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action2), TRUE); ++ gtk_widget_set_visible (priv->delete_file_item, FALSE); ++ gtk_widget_set_visible (priv->trash_file_item, TRUE); ++ } ++ else if (g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE)) ++ { ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); ++ gtk_widget_set_visible (priv->delete_file_item, TRUE); ++ gtk_widget_set_visible (priv->trash_file_item, FALSE); ++ } ++ else ++ { ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action2), FALSE); ++ gtk_widget_set_visible (priv->delete_file_item, FALSE); ++ gtk_widget_set_visible (priv->trash_file_item, TRUE); ++ } ++ ++ g_slist_free_full (infos, g_object_unref); ++ } ++ else ++ { ++ gtk_widget_set_visible (priv->delete_file_item, FALSE); ++ gtk_widget_set_visible (priv->trash_file_item, TRUE); ++ g_simple_action_set_enabled (G_SIMPLE_ACTION (action2), FALSE); ++ } ++} ++ ++static GActionEntry entries[] = { ++ { "visit", visit_file_cb, NULL, NULL, NULL }, ++ { "open", open_folder_cb, NULL, NULL, NULL }, ++ { "copy-location", copy_file_location_cb, NULL, NULL, NULL }, ++ { "add-shortcut", add_to_shortcuts_cb, NULL, NULL, NULL }, ++ { "rename", rename_file_cb, NULL, NULL, NULL }, ++ { "delete", delete_file_cb, NULL, NULL, NULL }, ++ { "trash", trash_file_cb, NULL, NULL, NULL }, ++ { "toggle-show-hidden", NULL, NULL, "false", change_show_hidden_state }, ++ { "toggle-show-size", NULL, NULL, "false", change_show_size_state }, ++ { "toggle-show-type", NULL, NULL, "false", change_show_type_state }, ++ { "toggle-show-time", NULL, NULL, "false", change_show_time_state }, ++ { "toggle-sort-dirs-first", NULL, NULL, "false", change_sort_directories_first_state } ++}; ++ ++static void ++add_actions (GtkFileChooserWidget *impl) ++{ ++ GActionGroup *actions; ++ ++ actions = G_ACTION_GROUP (g_simple_action_group_new ()); ++ g_action_map_add_action_entries (G_ACTION_MAP (actions), ++ entries, G_N_ELEMENTS (entries), ++ impl); ++ gtk_widget_insert_action_group (GTK_WIDGET (impl->priv->browse_files_tree_view), "item", actions); ++ g_object_unref (actions); ++} ++ ++static GtkWidget * ++append_separator (GtkWidget *box) ++{ ++ GtkWidget *separator; ++ ++ separator = g_object_new (GTK_TYPE_SEPARATOR, ++ "orientation", GTK_ORIENTATION_HORIZONTAL, ++ "visible", TRUE, ++ "margin-start", 12, ++ "margin-end", 12, ++ "margin-top", 6, ++ "margin-bottom", 6, ++ NULL); ++ gtk_container_add (GTK_CONTAINER (box), separator); ++ ++ return separator; ++} ++ ++/* Constructs the popup menu for the file list if needed */ ++static GtkWidget * ++add_button (GtkWidget *box, ++ const gchar *label, ++ const gchar *action) ++{ ++ GtkWidget *item; ++ ++ item = g_object_new (GTK_TYPE_MODEL_BUTTON, ++ "visible", TRUE, ++ "action-name", action, ++ "text", label, ++ NULL); ++ gtk_container_add (GTK_CONTAINER (box), item); ++ ++ return item; ++} ++ ++static void ++file_list_build_popover (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *box; ++ ++ if (priv->browse_files_popover) ++ return; ++ ++ priv->browse_files_popover = gtk_popover_new (priv->browse_files_tree_view); ++ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); ++ g_object_set (box, "margin", 10, NULL); ++ gtk_widget_show (box); ++ gtk_container_add (GTK_CONTAINER (priv->browse_files_popover), box); ++ ++ priv->visit_file_item = add_button (box, _("_Visit File"), "item.visit"); ++ priv->open_folder_item = add_button (box, _("_Open With File Manager"), "item.open"); ++ priv->copy_file_location_item = add_button (box, _("_Copy Location"), "item.copy-location"); ++ priv->add_shortcut_item = add_button (box, _("_Add to Bookmarks"), "item.add-shortcut"); ++ priv->rename_file_item = add_button (box, _("_Rename"), "item.rename"); ++ priv->delete_file_item = add_button (box, _("_Delete"), "item.delete"); ++ priv->trash_file_item = add_button (box, _("_Move to Trash"), "item.trash"); ++ ++ append_separator (box); ++ ++ priv->hidden_files_item = add_button (box, _("Show _Hidden Files"), "item.toggle-show-hidden"); ++ priv->size_column_item = add_button (box, _("Show _Size Column"), "item.toggle-show-size"); ++ priv->type_column_item = add_button (box, _("Show T_ype Column"), "item.toggle-show-type"); ++ priv->show_time_item = add_button (box, _("Show _Time"), "item.toggle-show-time"); ++ priv->sort_directories_item = add_button (box, _("Sort _Folders before Files"), "item.toggle-sort-dirs-first"); ++} ++ ++/* Updates the popover for the file list, creating it if necessary */ ++static void ++file_list_update_popover (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GActionGroup *actions; ++ GAction *action; ++ ++ file_list_build_popover (impl); ++ check_file_list_popover_sensitivity (impl); ++ ++ /* The sensitivity of the Add to Bookmarks item is set in ++ * bookmarks_check_add_sensitivity() ++ */ ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || ++ priv->operation_mode != OPERATION_MODE_BROWSE) ++ { ++ gtk_widget_set_visible (priv->rename_file_item, FALSE); ++ gtk_widget_set_visible (priv->delete_file_item, FALSE); ++ gtk_widget_set_visible (priv->trash_file_item, FALSE); ++ } ++ ++ gtk_widget_set_visible (priv->visit_file_item, (priv->operation_mode != OPERATION_MODE_BROWSE)); ++ ++ actions = gtk_widget_get_action_group (priv->browse_files_tree_view, "item"); ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "toggle-show-hidden"); ++ g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (priv->show_hidden)); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "toggle-show-size"); ++ g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (priv->show_size_column)); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "toggle-show-type"); ++ g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (priv->show_type_column)); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "toggle-show-time"); ++ g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (priv->show_time)); ++ ++ action = g_action_map_lookup_action (G_ACTION_MAP (actions), "toggle-sort-dirs-first"); ++ g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (priv->sort_directories_first)); ++} ++ ++static void ++file_list_show_popover (GtkFileChooserWidget *impl, ++ gdouble x, ++ gdouble y) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GdkRectangle rect; ++ GtkTreeSelection *selection; ++ GtkTreeModel *model; ++ GList *list; ++ GtkTreePath *path; ++ ++ ++ file_list_update_popover (impl); ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ list = gtk_tree_selection_get_selected_rows (selection, &model); ++ if (list) ++ { ++ path = list->data; ++ gtk_tree_view_get_cell_area (GTK_TREE_VIEW (priv->browse_files_tree_view), path, NULL, &rect); ++ gtk_tree_view_convert_bin_window_to_widget_coords (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ rect.x, rect.y, &rect.x, &rect.y); ++ ++ rect.x = CLAMP (x - 20, 0, gtk_widget_get_allocated_width (priv->browse_files_tree_view) - 40); ++ rect.width = 40; ++ ++ g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free); ++ } ++ else ++ { ++ rect.x = x; ++ rect.y = y; ++ rect.width = 1; ++ rect.height = 1; ++ } ++ ++ gtk_popover_set_pointing_to (GTK_POPOVER (priv->browse_files_popover), &rect); ++ gtk_popover_popup (GTK_POPOVER (priv->browse_files_popover)); ++} ++ ++/* Callback used for the GtkWidget::popup-menu signal of the file list */ ++static gboolean ++list_popup_menu_cb (GtkWidget *widget, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ file_list_show_popover (impl, ++ 0.5 * gtk_widget_get_allocated_width (GTK_WIDGET (priv->browse_files_tree_view)), ++ 0.5 * gtk_widget_get_allocated_height (GTK_WIDGET (priv->browse_files_tree_view))); ++ return TRUE; ++} ++ ++/* Callback used when a button is pressed on the file list. We trap button 3 to ++ * bring up a popup menu. ++ */ ++static gboolean ++list_button_press_event_cb (GtkWidget *widget, ++ GdkEventButton *event, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ static gboolean in_press = FALSE; ++ ++ if (priv->browse_files_interaction_frozen) ++ return GDK_EVENT_STOP; ++ ++ if (in_press) ++ return FALSE; ++ ++ if (!gdk_event_triggers_context_menu ((GdkEvent *) event)) ++ return FALSE; ++ ++ in_press = TRUE; ++ gtk_widget_event (priv->browse_files_tree_view, (GdkEvent *) event); ++ in_press = FALSE; ++ ++ file_list_show_popover (impl, event->x, event->y); ++ ++ return TRUE; ++} ++ ++static void ++long_press_cb (GtkGesture *gesture, ++ gdouble x, ++ gdouble y, ++ GtkFileChooserWidget *impl) ++{ ++ file_list_show_popover (impl, x, y); ++} ++ ++typedef struct { ++ OperationMode operation_mode; ++ gint general_column; ++ gint model_column; ++} ColumnMap; ++ ++/* Sets the sort column IDs for the file list; needs to be done whenever we ++ * change the model on the treeview. ++ */ ++static void ++file_list_set_sort_column_ids (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1); ++ ++ gtk_tree_view_column_set_sort_column_id (priv->list_name_column, MODEL_COL_NAME); ++ gtk_tree_view_column_set_sort_column_id (priv->list_time_column, MODEL_COL_TIME); ++ gtk_tree_view_column_set_sort_column_id (priv->list_size_column, MODEL_COL_SIZE); ++ gtk_tree_view_column_set_sort_column_id (priv->list_type_column, MODEL_COL_TYPE); ++ gtk_tree_view_column_set_sort_column_id (priv->list_location_column, MODEL_COL_LOCATION_TEXT); ++} ++ ++static gboolean ++file_list_query_tooltip_cb (GtkWidget *widget, ++ gint x, ++ gint y, ++ gboolean keyboard_tip, ++ GtkTooltip *tooltip, ++ gpointer user_data) ++{ ++ GtkFileChooserWidget *impl = user_data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeModel *model; ++ GtkTreePath *path; ++ GtkTreeIter iter; ++ GFile *file; ++ gchar *filename; ++ ++ if (priv->operation_mode == OPERATION_MODE_BROWSE) ++ return FALSE; ++ ++ ++ if (!gtk_tree_view_get_tooltip_context (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ &x, &y, ++ keyboard_tip, ++ &model, &path, &iter)) ++ return FALSE; ++ ++ gtk_tree_model_get (model, &iter, ++ MODEL_COL_FILE, &file, ++ -1); ++ ++ if (file == NULL) ++ { ++ gtk_tree_path_free (path); ++ return FALSE; ++ } ++ ++ filename = g_file_get_path (file); ++ gtk_tooltip_set_text (tooltip, filename); ++ gtk_tree_view_set_tooltip_row (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ tooltip, ++ path); ++ ++ g_free (filename); ++ g_object_unref (file); ++ gtk_tree_path_free (path); ++ ++ return TRUE; ++} ++ ++static void ++set_icon_cell_renderer_fixed_size (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gint xpad, ypad; ++ ++ gtk_cell_renderer_get_padding (priv->list_pixbuf_renderer, &xpad, &ypad); ++ gtk_cell_renderer_set_fixed_size (priv->list_pixbuf_renderer, ++ xpad * 2 + priv->icon_size, ++ ypad * 2 + priv->icon_size); ++} ++ ++static gboolean ++location_changed_timeout_cb (gpointer user_data) ++{ ++ GtkFileChooserWidget *impl = user_data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (impl)); ++ check_preview_change (impl); ++ g_signal_emit_by_name (impl, "selection-changed", 0); ++ ++ priv->location_changed_id = 0; ++ ++ return G_SOURCE_REMOVE; ++} ++ ++static void ++reset_location_timeout (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->location_changed_id > 0) ++ g_source_remove (priv->location_changed_id); ++ priv->location_changed_id = g_timeout_add (LOCATION_CHANGED_TIMEOUT, ++ location_changed_timeout_cb, ++ impl); ++ g_source_set_name_by_id (priv->location_changed_id, "[gtk+] location_changed_timeout_cb"); ++} ++ ++static void ++location_entry_changed_cb (GtkEditable *editable, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH) ++ { ++ operation_mode_set (impl, OPERATION_MODE_BROWSE); ++ if (priv->current_folder) ++ change_folder_and_display_error (impl, priv->current_folder, FALSE); ++ else ++ switch_to_home_dir (impl); ++ } ++ ++ if (priv->action != GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ reset_location_timeout (impl); ++} ++ ++static void ++location_entry_close_clicked (GtkFileChooserWidget *impl) ++{ ++ location_mode_set (impl, LOCATION_MODE_PATH_BAR); ++} ++ ++static void ++location_entry_setup (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ gtk_entry_set_placeholder_text (GTK_ENTRY (priv->location_entry), _("Location")); ++ ++ g_signal_connect (priv->location_entry, "changed", ++ G_CALLBACK (location_entry_changed_cb), impl); ++ g_signal_connect_swapped (priv->location_entry, "hide-entry", ++ G_CALLBACK (location_entry_close_clicked), impl); ++ ++ _gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->local_only); ++ _gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->action); ++ _gtk_file_chooser_entry_set_file_filter (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), ++ priv->current_filter); ++ gtk_entry_set_width_chars (GTK_ENTRY (priv->location_entry), 45); ++ gtk_entry_set_activates_default (GTK_ENTRY (priv->location_entry), TRUE); ++} ++ ++static void ++location_entry_disconnect (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->location_entry) ++ g_signal_handlers_disconnect_by_func (priv->location_entry, location_entry_changed_cb, impl); ++} ++ ++static void ++location_entry_create (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (!priv->location_entry) ++ { ++ gboolean eat_escape; ++ ++ eat_escape = priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; ++ ++ priv->location_entry = _gtk_file_chooser_entry_new (TRUE, eat_escape); ++ location_entry_setup (impl); ++ } ++} ++ ++static gboolean ++external_entry_key_press (GtkWidget *entry, ++ GdkEventKey *event, ++ GtkFileChooserWidget *impl) ++{ ++ /* Since the entry is not a descendent of the file chooser widget ++ * in this case, we need to manually make our bindings apply. ++ */ ++ return gtk_bindings_activate_event (G_OBJECT (impl), event); ++} ++ ++/* Creates the widgets specific to Save mode */ ++static void ++save_widgets_create (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *vbox; ++ GtkWidget *widget; ++ ++ if (priv->save_widgets != NULL || ++ (priv->external_entry && priv->location_entry == priv->external_entry)) ++ return; ++ ++ location_switch_to_path_bar (impl); ++ ++ gtk_places_sidebar_set_location (GTK_PLACES_SIDEBAR (priv->places_sidebar), priv->current_folder); ++ ++ if (priv->external_entry) ++ { ++ location_entry_disconnect (impl); ++ priv->location_entry = priv->external_entry; ++ location_entry_setup (impl); ++ ++ g_signal_connect_after (priv->external_entry, "key-press-event", ++ G_CALLBACK (external_entry_key_press), impl); ++ return; ++ } ++ ++ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); ++ gtk_style_context_add_class (gtk_widget_get_style_context (vbox), "search-bar"); ++ ++ gtk_container_set_border_width (GTK_CONTAINER (vbox), 0); ++ ++ priv->save_widgets_table = gtk_grid_new (); ++ gtk_container_set_border_width (GTK_CONTAINER (priv->save_widgets_table), 10); ++ gtk_box_pack_start (GTK_BOX (vbox), priv->save_widgets_table, FALSE, FALSE, 0); ++ gtk_widget_show (priv->save_widgets_table); ++ gtk_grid_set_row_spacing (GTK_GRID (priv->save_widgets_table), 12); ++ gtk_grid_set_column_spacing (GTK_GRID (priv->save_widgets_table), 12); ++ ++ /* Label */ ++ ++ widget = gtk_label_new_with_mnemonic (_("_Name:")); ++ gtk_widget_set_halign (widget, GTK_ALIGN_START); ++ gtk_widget_set_valign (widget, GTK_ALIGN_CENTER); ++ gtk_grid_attach (GTK_GRID (priv->save_widgets_table), widget, 0, 0, 1, 1); ++ gtk_widget_show (widget); ++ ++ /* Location entry */ ++ ++ location_entry_create (impl); ++ gtk_widget_set_hexpand (priv->location_entry, TRUE); ++ gtk_grid_attach (GTK_GRID (priv->save_widgets_table), priv->location_entry, 1, 0, 1, 1); ++ gtk_widget_show (priv->location_entry); ++ gtk_label_set_mnemonic_widget (GTK_LABEL (widget), priv->location_entry); ++ ++ priv->save_widgets = vbox; ++ gtk_box_pack_start (GTK_BOX (impl), priv->save_widgets, FALSE, FALSE, 0); ++ gtk_box_reorder_child (GTK_BOX (impl), priv->save_widgets, 0); ++ gtk_widget_show (priv->save_widgets); ++} ++ ++/* Destroys the widgets specific to Save mode */ ++static void ++save_widgets_destroy (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->external_entry && priv->external_entry == priv->location_entry) ++ { ++ g_signal_handlers_disconnect_by_func (priv->external_entry, external_entry_key_press, impl); ++ ++ location_entry_disconnect (impl); ++ priv->location_entry = NULL; ++ } ++ ++ if (priv->save_widgets == NULL) ++ return; ++ ++ gtk_widget_destroy (priv->save_widgets); ++ priv->save_widgets = NULL; ++ priv->save_widgets_table = NULL; ++ priv->location_entry = NULL; ++} ++ ++/* Turns on the path bar widget. Can be called even if we are already in that ++ * mode. ++ */ ++static void ++location_switch_to_path_bar (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->location_entry) ++ { ++ gtk_widget_destroy (priv->location_entry); ++ priv->location_entry = NULL; ++ } ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "pathbar"); ++} ++ ++/* Turns on the location entry. Can be called even if we are already in that ++ * mode. ++ */ ++static void ++location_switch_to_filename_entry (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ /* when in search or recent files mode, we are not showing the ++ * browse_header_box container, so there's no point in switching ++ * to it. ++ */ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH || ++ priv->operation_mode == OPERATION_MODE_RECENT) ++ return; ++ ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->browse_header_revealer), TRUE); ++ ++ if (!priv->location_entry) ++ { ++ location_entry_create (impl); ++ gtk_box_pack_start (GTK_BOX (priv->location_entry_box), priv->location_entry, TRUE, TRUE, 0); ++ } ++ ++ _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->current_folder); ++ ++ gtk_widget_show (priv->location_entry); ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "location"); ++ ++ gtk_widget_grab_focus (priv->location_entry); ++} ++ ++/* Sets a new location mode. ++ */ ++static void ++location_mode_set (GtkFileChooserWidget *impl, ++ LocationMode new_mode) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ { ++ GtkWindow *toplevel; ++ GtkWidget *current_focus; ++ gboolean switch_to_file_list; ++ ++ switch (new_mode) ++ { ++ case LOCATION_MODE_PATH_BAR: ++ ++ /* The location_entry will disappear when we switch to path bar mode. So, ++ * we'll focus the file list in that case, to avoid having a window with ++ * no focused widget. ++ */ ++ toplevel = get_toplevel (GTK_WIDGET (impl)); ++ switch_to_file_list = FALSE; ++ if (toplevel) ++ { ++ current_focus = gtk_window_get_focus (toplevel); ++ if (!current_focus || current_focus == priv->location_entry) ++ switch_to_file_list = TRUE; ++ } ++ ++ location_switch_to_path_bar (impl); ++ ++ if (switch_to_file_list) ++ gtk_widget_grab_focus (priv->browse_files_tree_view); ++ ++ break; ++ ++ case LOCATION_MODE_FILENAME_ENTRY: ++ location_switch_to_filename_entry (impl); ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ return; ++ } ++ } ++ ++ priv->location_mode = new_mode; ++ g_object_notify (G_OBJECT (impl), "subtitle"); ++} ++ ++/* Callback used when the places sidebar asks us to show other locations */ ++static void ++places_sidebar_show_other_locations_with_flags_cb (GtkPlacesSidebar *sidebar, ++ GtkPlacesOpenFlags open_flags, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ priv->preview_widget_active = FALSE; ++ ++ update_preview_widget_visibility (impl); ++ ++ operation_mode_set (impl, OPERATION_MODE_OTHER_LOCATIONS); ++} ++ ++static void ++location_toggle_popup_handler (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if ((priv->operation_mode == OPERATION_MODE_RECENT || ++ priv->operation_mode == OPERATION_MODE_SEARCH) && ++ (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)) ++ operation_mode_set (impl, OPERATION_MODE_BROWSE); ++ ++ /* If the file entry is not visible, show it (it is _always_ ++ * visible in save modes, handle these first). ++ * If it is visible, turn it off only if it is focused. ++ * Otherwise, switch to the entry. ++ */ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ gtk_widget_grab_focus (priv->location_entry); ++ } ++ else if (priv->location_mode == LOCATION_MODE_PATH_BAR) ++ { ++ location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY); ++ } ++ else if (priv->location_mode == LOCATION_MODE_FILENAME_ENTRY) ++ { ++ if (gtk_widget_has_focus (priv->location_entry)) ++ { ++ location_mode_set (impl, LOCATION_MODE_PATH_BAR); ++ } ++ else ++ { ++ gtk_widget_grab_focus (priv->location_entry); ++ } ++ } ++} ++ ++static void ++gtk_file_chooser_widget_constructed (GObject *object) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (object); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ profile_start ("start", NULL); ++ ++ G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->constructed (object); ++ ++ g_assert (priv->file_system); ++ ++ update_appearance (impl); ++ ++ profile_end ("end", NULL); ++} ++ ++static void ++update_extra_and_filters (GtkFileChooserWidget *impl) ++{ ++ gtk_widget_set_visible (impl->priv->extra_and_filters, ++ gtk_widget_get_visible (impl->priv->extra_align) || ++ gtk_widget_get_visible (impl->priv->filter_combo_hbox)); ++} ++ ++/* Sets the extra_widget by packing it in the appropriate place */ ++static void ++set_extra_widget (GtkFileChooserWidget *impl, ++ GtkWidget *extra_widget) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (extra_widget) ++ { ++ g_object_ref (extra_widget); ++ /* FIXME: is this right ? */ ++ gtk_widget_show (extra_widget); ++ } ++ ++ if (priv->extra_widget) ++ { ++ gtk_container_remove (GTK_CONTAINER (priv->extra_align), priv->extra_widget); ++ g_object_unref (priv->extra_widget); ++ } ++ ++ priv->extra_widget = extra_widget; ++ if (priv->extra_widget) ++ { ++ gtk_container_add (GTK_CONTAINER (priv->extra_align), priv->extra_widget); ++ gtk_widget_show (priv->extra_align); ++ } ++ else ++ gtk_widget_hide (priv->extra_align); ++ ++ /* Calls update_extra_and_filters */ ++ show_filters (impl, priv->filters != NULL); ++} ++ ++static void ++switch_to_home_dir (GtkFileChooserWidget *impl) ++{ ++ const gchar *home = g_get_home_dir (); ++ GFile *home_file; ++ ++ if (home == NULL) ++ return; ++ ++ home_file = g_file_new_for_path (home); ++ ++ gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (impl), home_file, NULL); /* NULL-GError */ ++ ++ g_object_unref (home_file); ++} ++ ++static void ++set_local_only (GtkFileChooserWidget *impl, ++ gboolean local_only) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (local_only != priv->local_only) ++ { ++ priv->local_only = local_only; ++ ++ if (priv->location_entry) ++ _gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), local_only); ++ ++ gtk_places_sidebar_set_local_only (GTK_PLACES_SIDEBAR (priv->places_sidebar), local_only); ++ ++ if (local_only && priv->current_folder && ++ !_gtk_file_has_native_path (priv->current_folder)) ++ { ++ /* If we are pointing to a non-local folder, make an effort to change ++ * back to a local folder, but it's really up to the app to not cause ++ * such a situation, so we ignore errors. ++ */ ++ switch_to_home_dir (impl); ++ } ++ } ++} ++ ++/* Sets the file chooser to multiple selection mode */ ++static void ++set_select_multiple (GtkFileChooserWidget *impl, ++ gboolean select_multiple, ++ gboolean property_notify) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ GtkSelectionMode mode; ++ ++ if (select_multiple == priv->select_multiple) ++ return; ++ ++ mode = select_multiple ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_set_mode (selection, mode); ++ ++ gtk_tree_view_set_rubber_banding (GTK_TREE_VIEW (priv->browse_files_tree_view), select_multiple); ++ ++ priv->select_multiple = select_multiple; ++ g_object_notify (G_OBJECT (impl), "select-multiple"); ++ ++ check_preview_change (impl); ++} ++ ++static void ++set_file_system_backend (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ profile_start ("start for backend", "default"); ++ ++ priv->file_system = _gtk_file_system_new (); ++ ++ profile_end ("end", NULL); ++} ++ ++static void ++unset_file_system_backend (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_object_unref (priv->file_system); ++ ++ priv->file_system = NULL; ++} ++ ++/* Takes the folder stored in a row in the recent_model, and puts it in the pathbar */ ++static void ++put_recent_folder_in_pathbar (GtkFileChooserWidget *impl, GtkTreeIter *iter) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *file; ++ ++ gtk_tree_model_get (GTK_TREE_MODEL (priv->recent_model), iter, ++ MODEL_COL_FILE, &file, ++ -1); ++ _gtk_path_bar_set_file (GTK_PATH_BAR (priv->browse_path_bar), file, FALSE); ++ g_object_unref (file); ++} ++ ++/* Sets the location bar in the appropriate mode according to the ++ * current operation mode and action. This is the central function ++ * for dealing with the pathbar’s widgets; as long as impl->action and ++ * impl->operation_mode are set correctly, then calling this function ++ * will update all the pathbar’s widgets. ++ */ ++static void ++location_bar_update (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean visible = TRUE; ++ gboolean create_folder_visible = FALSE; ++ ++ switch (priv->operation_mode) ++ { ++ case OPERATION_MODE_ENTER_LOCATION: ++ break; ++ ++ case OPERATION_MODE_OTHER_LOCATIONS: ++ break; ++ ++ case OPERATION_MODE_BROWSE: ++ break; ++ ++ case OPERATION_MODE_RECENT: ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ { ++ GtkTreeSelection *selection; ++ gboolean have_selected; ++ GtkTreeIter iter; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ ++ /* Save mode means single-selection mode, so the following is valid */ ++ have_selected = gtk_tree_selection_get_selected (selection, NULL, &iter); ++ ++ if (have_selected) ++ put_recent_folder_in_pathbar (impl, &iter); ++ } ++ visible = FALSE; ++ break; ++ ++ case OPERATION_MODE_SEARCH: ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ return; ++ } ++ ++ if (visible) ++ { ++ if (priv->create_folders ++ && priv->action != GTK_FILE_CHOOSER_ACTION_OPEN ++ && priv->operation_mode != OPERATION_MODE_RECENT) ++ create_folder_visible = TRUE; ++ } ++ ++ gtk_widget_set_visible (priv->browse_new_folder_button, create_folder_visible); ++} ++ ++static void ++operation_mode_stop (GtkFileChooserWidget *impl, ++ OperationMode mode) ++{ ++ if (mode == OPERATION_MODE_SEARCH) ++ { ++ g_clear_object (&impl->priv->model_for_search); ++ search_stop_searching (impl, TRUE); ++ search_clear_model (impl, TRUE); ++ gtk_widget_hide (impl->priv->remote_warning_bar); ++ } ++} ++ ++static void ++operation_mode_set_enter_location (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "list"); ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "location"); ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->browse_header_revealer), TRUE); ++ location_bar_update (impl); ++ gtk_widget_set_sensitive (priv->filter_combo, TRUE); ++ location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY); ++} ++ ++static void ++operation_mode_set_browse (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_places_sidebar_set_location (GTK_PLACES_SIDEBAR (priv->places_sidebar), priv->current_folder); ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "list"); ++ location_mode_set (impl, LOCATION_MODE_PATH_BAR); ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "pathbar"); ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->browse_header_revealer), TRUE); ++ gtk_widget_set_sensitive (priv->filter_combo, TRUE); ++ g_object_notify (G_OBJECT (impl), "subtitle"); ++} ++ ++static void ++operation_mode_set_search (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *visible_widget; ++ ++ g_assert (priv->search_model == NULL); ++ ++ visible_widget = gtk_stack_get_visible_child (GTK_STACK (priv->browse_files_stack)); ++ ++ if (visible_widget != priv->places_view && ++ visible_widget != priv->browse_files_swin) ++ { ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "list"); ++ } ++ ++ gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry)); ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "search"); ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->browse_header_revealer), TRUE); ++ location_bar_update (impl); ++ search_setup_widgets (impl); ++ gtk_widget_set_sensitive (priv->filter_combo, FALSE); ++} ++ ++static void ++operation_mode_set_recent (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *file; ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "list"); ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "pathbar"); ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->browse_header_revealer), FALSE); ++ location_bar_update (impl); ++ recent_start_loading (impl); ++ file = g_file_new_for_uri ("recent:///"); ++ gtk_places_sidebar_set_location (GTK_PLACES_SIDEBAR (priv->places_sidebar), file); ++ g_object_notify (G_OBJECT (impl), "subtitle"); ++ g_object_unref (file); ++ gtk_widget_set_sensitive (priv->filter_combo, TRUE); ++} ++ ++static void ++operation_mode_set_other_locations (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "other_locations"); ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "pathbar"); ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->browse_header_revealer), FALSE); ++ location_bar_update (impl); ++ stop_loading_and_clear_list_model (impl, TRUE); ++ recent_stop_loading (impl); ++ search_stop_searching (impl, TRUE); ++ recent_clear_model (impl, TRUE); ++ search_clear_model (impl, TRUE); ++ gtk_widget_set_sensitive (priv->filter_combo, FALSE); ++} ++ ++static void ++operation_mode_set (GtkFileChooserWidget *impl, OperationMode mode) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ OperationMode old_mode; ++ ++ operation_mode_stop (impl, priv->operation_mode); ++ ++ old_mode = priv->operation_mode; ++ priv->operation_mode = mode; ++ ++ switch (priv->operation_mode) ++ { ++ case OPERATION_MODE_ENTER_LOCATION: ++ operation_mode_set_enter_location (impl); ++ break; ++ ++ case OPERATION_MODE_OTHER_LOCATIONS: ++ operation_mode_set_other_locations (impl); ++ break; ++ ++ case OPERATION_MODE_BROWSE: ++ operation_mode_set_browse (impl); ++ break; ++ ++ case OPERATION_MODE_SEARCH: ++ operation_mode_set_search (impl); ++ break; ++ ++ case OPERATION_MODE_RECENT: ++ operation_mode_set_recent (impl); ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ return; ++ } ++ ++ if ((old_mode == OPERATION_MODE_SEARCH) != (mode == OPERATION_MODE_SEARCH)) ++ g_object_notify (G_OBJECT (impl), "search-mode"); ++ ++ g_object_notify (G_OBJECT (impl), "subtitle"); ++} ++ ++/* This function is basically a do_all function. ++ * ++ * It sets the visibility on all the widgets based on the current state, and ++ * moves the custom_widget if needed. ++ */ ++static void ++update_appearance (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ save_widgets_create (impl); ++ gtk_places_sidebar_set_show_recent (GTK_PLACES_SIDEBAR (priv->places_sidebar), FALSE); ++ gtk_places_sidebar_set_show_trash (GTK_PLACES_SIDEBAR (priv->places_sidebar), FALSE); ++ ++ if (priv->select_multiple) ++ { ++ g_warning ("Save mode cannot be set in conjunction with multiple selection mode. " ++ "Re-setting to single selection mode."); ++ set_select_multiple (impl, FALSE, TRUE); ++ } ++ ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ { ++ save_widgets_destroy (impl); ++ gtk_places_sidebar_set_show_recent (GTK_PLACES_SIDEBAR (priv->places_sidebar), recent_files_setting_is_enabled (impl)); ++ location_mode_set (impl, priv->location_mode); ++ } ++ ++ if (priv->location_entry) ++ _gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->action); ++ ++ location_bar_update (impl); ++ ++ /* This *is* needed; we need to redraw the file list because the "sensitivity" ++ * of files may change depending whether we are in a file or folder-only mode. ++ */ ++ gtk_widget_queue_draw (priv->browse_files_tree_view); ++ ++ emit_default_size_changed (impl); ++} ++ ++static gchar * ++gtk_file_chooser_widget_get_subtitle (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gchar *subtitle = NULL; ++ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH) ++ { ++ gchar *location; ++ ++ location = gtk_places_sidebar_get_location_title (GTK_PLACES_SIDEBAR (priv->places_sidebar)); ++ if (location) ++ { ++ subtitle = g_strdup_printf (_("Searching in %s"), location); ++ g_free (location); ++ } ++ else if (priv->current_folder) ++ { ++ GFileInfo *info; ++ ++ info = g_file_query_info (priv->current_folder, ++ G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, ++ G_FILE_QUERY_INFO_NONE, ++ NULL, ++ NULL); ++ if (info) ++ { ++ subtitle = g_strdup_printf (_("Searching in %s"), g_file_info_get_display_name (info)); ++ g_object_unref (info); ++ } ++ } ++ ++ if (subtitle == NULL) ++ subtitle = g_strdup (_("Searching")); ++ } ++ else if (priv->operation_mode == OPERATION_MODE_ENTER_LOCATION || ++ (priv->operation_mode == OPERATION_MODE_BROWSE && ++ priv->location_mode == LOCATION_MODE_FILENAME_ENTRY)) ++ { ++ if (priv->local_only) ++ subtitle = g_strdup (_("Enter location")); ++ else ++ subtitle = g_strdup (_("Enter location or URL")); ++ } ++ ++ return subtitle; ++} ++ ++static void ++set_show_hidden (GtkFileChooserWidget *impl, ++ gboolean show_hidden) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->show_hidden != show_hidden) ++ { ++ priv->show_hidden = show_hidden; ++ ++ if (priv->browse_files_model) ++ _gtk_file_system_model_set_show_hidden (priv->browse_files_model, show_hidden); ++ } ++} ++ ++static void ++gtk_file_chooser_widget_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++ ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (object); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ switch (prop_id) ++ { ++ case PROP_SEARCH_MODE: ++ if (g_value_get_boolean (value)) ++ operation_mode_set (impl, OPERATION_MODE_SEARCH); ++ else ++ { ++ if (gtk_stack_get_visible_child (GTK_STACK (priv->browse_files_stack)) != priv->places_view) ++ { ++ operation_mode_set (impl, OPERATION_MODE_BROWSE); ++ ++ if (priv->current_folder) ++ change_folder_and_display_error (impl, priv->current_folder, FALSE); ++ else ++ switch_to_home_dir (impl); ++ } ++ else ++ { ++ operation_mode_set (impl, OPERATION_MODE_OTHER_LOCATIONS); ++ } ++ } ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_ACTION: ++ { ++ GtkFileChooserAction action = g_value_get_enum (value); ++ ++ if (action != priv->action) ++ { ++ gtk_file_chooser_widget_unselect_all (GTK_FILE_CHOOSER (impl)); ++ ++ if ((action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ && priv->select_multiple) ++ { ++ g_warning ("Tried to change the file chooser action to SAVE or CREATE_FOLDER, but " ++ "this is not allowed in multiple selection mode. Resetting the file chooser " ++ "to single selection mode."); ++ set_select_multiple (impl, FALSE, TRUE); ++ } ++ priv->action = action; ++ update_cell_renderer_attributes (impl); ++ update_appearance (impl); ++ settings_load (impl); ++ } ++ } ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_FILTER: ++ set_current_filter (impl, g_value_get_object (value)); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: ++ set_local_only (impl, g_value_get_boolean (value)); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: ++ set_preview_widget (impl, g_value_get_object (value)); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: ++ priv->preview_widget_active = g_value_get_boolean (value); ++ update_preview_widget_visibility (impl); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: ++ priv->use_preview_label = g_value_get_boolean (value); ++ update_preview_widget_visibility (impl); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: ++ set_extra_widget (impl, g_value_get_object (value)); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: ++ { ++ gboolean select_multiple = g_value_get_boolean (value); ++ if ((priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ && select_multiple) ++ { ++ g_warning ("Tried to set the file chooser to multiple selection mode, but this is " ++ "not allowed in SAVE or CREATE_FOLDER modes. Ignoring the change and " ++ "leaving the file chooser in single selection mode."); ++ return; ++ } ++ ++ set_select_multiple (impl, select_multiple, FALSE); ++ } ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: ++ priv->show_hidden_set = TRUE; ++ set_show_hidden (impl, g_value_get_boolean (value)); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION: ++ { ++ gboolean do_overwrite_confirmation = g_value_get_boolean (value); ++ priv->do_overwrite_confirmation = do_overwrite_confirmation; ++ } ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: ++ { ++ gboolean create_folders = g_value_get_boolean (value); ++ priv->create_folders = create_folders; ++ update_appearance (impl); ++ } ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_file_chooser_widget_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (object); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ switch (prop_id) ++ { ++ case PROP_SEARCH_MODE: ++ g_value_set_boolean (value, priv->operation_mode == OPERATION_MODE_SEARCH); ++ break; ++ ++ case PROP_SUBTITLE: ++ g_value_take_string (value, gtk_file_chooser_widget_get_subtitle (impl)); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_ACTION: ++ g_value_set_enum (value, priv->action); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_FILTER: ++ g_value_set_object (value, priv->current_filter); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY: ++ g_value_set_boolean (value, priv->local_only); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET: ++ g_value_set_object (value, priv->preview_widget); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE: ++ g_value_set_boolean (value, priv->preview_widget_active); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL: ++ g_value_set_boolean (value, priv->use_preview_label); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET: ++ g_value_set_object (value, priv->extra_widget); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: ++ g_value_set_boolean (value, priv->select_multiple); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN: ++ g_value_set_boolean (value, priv->show_hidden); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION: ++ g_value_set_boolean (value, priv->do_overwrite_confirmation); ++ break; ++ ++ case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: ++ g_value_set_boolean (value, priv->create_folders); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++/* This cancels everything that may be going on in the background. */ ++static void ++cancel_all_operations (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ pending_select_files_free (impl); ++ ++ if (priv->file_list_drag_data_received_cancellable) ++ { ++ g_cancellable_cancel (priv->file_list_drag_data_received_cancellable); ++ priv->file_list_drag_data_received_cancellable = NULL; ++ } ++ ++ if (priv->update_current_folder_cancellable) ++ { ++ g_cancellable_cancel (priv->update_current_folder_cancellable); ++ priv->update_current_folder_cancellable = NULL; ++ } ++ ++ if (priv->should_respond_get_info_cancellable) ++ { ++ g_cancellable_cancel (priv->should_respond_get_info_cancellable); ++ priv->should_respond_get_info_cancellable = NULL; ++ } ++ ++ if (priv->file_exists_get_info_cancellable) ++ { ++ g_cancellable_cancel (priv->file_exists_get_info_cancellable); ++ priv->file_exists_get_info_cancellable = NULL; ++ } ++ ++ search_stop_searching (impl, TRUE); ++ recent_stop_loading (impl); ++} ++ ++/* Removes the settings signal handler. It's safe to call multiple times */ ++static void ++remove_settings_signal (GtkFileChooserWidget *impl, ++ GdkScreen *screen) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->settings_signal_id) ++ { ++ GtkSettings *settings; ++ ++ settings = gtk_settings_get_for_screen (screen); ++ g_signal_handler_disconnect (settings, ++ priv->settings_signal_id); ++ priv->settings_signal_id = 0; ++ } ++} ++ ++static void ++gtk_file_chooser_widget_dispose (GObject *object) ++{ ++ GtkFileChooserWidget *impl = (GtkFileChooserWidget *) object; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ cancel_all_operations (impl); ++ ++ if (priv->rename_file_popover) ++ gtk_popover_set_relative_to (GTK_POPOVER (priv->rename_file_popover), NULL); ++ ++ if (priv->browse_files_popover) ++ { ++ gtk_widget_destroy (priv->browse_files_popover); ++ priv->browse_files_popover = NULL; ++ } ++ ++ if (priv->extra_widget) ++ { ++ g_object_unref (priv->extra_widget); ++ priv->extra_widget = NULL; ++ } ++ ++ remove_settings_signal (impl, gtk_widget_get_screen (GTK_WIDGET (impl))); ++ ++ if (priv->bookmarks_manager) ++ { ++ _gtk_bookmarks_manager_free (priv->bookmarks_manager); ++ priv->bookmarks_manager = NULL; ++ } ++ ++ if (priv->external_entry && priv->location_entry == priv->external_entry) ++ { ++ location_entry_disconnect (impl); ++ priv->external_entry = NULL; ++ } ++ ++ g_clear_object (&priv->long_press_gesture); ++ ++ G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->dispose (object); ++} ++ ++/* We override show-all since we have internal widgets that ++ * shouldn’t be shown when you call show_all(), like the filter ++ * combo box. ++ */ ++static void ++gtk_file_chooser_widget_show_all (GtkWidget *widget) ++{ ++ GtkFileChooserWidget *impl = (GtkFileChooserWidget *) widget; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_widget_show (widget); ++ ++ if (priv->extra_widget) ++ gtk_widget_show_all (priv->extra_widget); ++} ++ ++/* Handler for GtkWindow::set-focus; this is where we save the last-focused ++ * widget on our toplevel. See gtk_file_chooser_widget_hierarchy_changed() ++ */ ++static void ++toplevel_set_focus_cb (GtkWindow *window, ++ GtkWidget *focus, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ priv->toplevel_last_focus_widget = gtk_window_get_focus (window); ++} ++ ++/* We monitor the focus widget on our toplevel to be able to know which widget ++ * was last focused at the time our “should_respond” method gets called. ++ */ ++static void ++gtk_file_chooser_widget_hierarchy_changed (GtkWidget *widget, ++ GtkWidget *previous_toplevel) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (widget); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *toplevel; ++ ++ toplevel = gtk_widget_get_toplevel (widget); ++ ++ if (previous_toplevel && ++ priv->toplevel_set_focus_id != 0) ++ { ++ g_signal_handler_disconnect (previous_toplevel, ++ priv->toplevel_set_focus_id); ++ priv->toplevel_set_focus_id = 0; ++ priv->toplevel_last_focus_widget = NULL; ++ } ++ ++ if (gtk_widget_is_toplevel (toplevel)) ++ { ++ g_assert (priv->toplevel_set_focus_id == 0); ++ priv->toplevel_set_focus_id = g_signal_connect (toplevel, "set-focus", ++ G_CALLBACK (toplevel_set_focus_cb), impl); ++ priv->toplevel_last_focus_widget = gtk_window_get_focus (GTK_WINDOW (toplevel)); ++ } ++} ++ ++/* Changes the icons wherever it is needed */ ++static void ++change_icon_theme (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gint width, height; ++ ++ profile_start ("start", NULL); ++ ++ if (gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height)) ++ priv->icon_size = MAX (width, height); ++ else ++ priv->icon_size = FALLBACK_ICON_SIZE; ++ ++ /* the first cell in the first column is the icon column, and we have a fixed size there */ ++ set_icon_cell_renderer_fixed_size (impl); ++ ++ clear_model_cache (impl, MODEL_COL_SURFACE); ++ gtk_widget_queue_resize (priv->browse_files_tree_view); ++ ++ profile_end ("end", NULL); ++} ++ ++/* Callback used when a GtkSettings value changes */ ++static void ++settings_notify_cb (GObject *object, ++ GParamSpec *pspec, ++ GtkFileChooserWidget *impl) ++{ ++ const char *name; ++ ++ profile_start ("start", NULL); ++ ++ name = g_param_spec_get_name (pspec); ++ ++ if (strcmp (name, "gtk-icon-theme-name") == 0) ++ change_icon_theme (impl); ++ ++ profile_end ("end", NULL); ++} ++ ++/* Installs a signal handler for GtkSettings so that we can monitor changes in ++ * the icon theme. ++ */ ++static void ++check_icon_theme (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkSettings *settings; ++ ++ profile_start ("start", NULL); ++ ++ if (priv->settings_signal_id) ++ { ++ profile_end ("end", NULL); ++ return; ++ } ++ ++ if (gtk_widget_has_screen (GTK_WIDGET (impl))) ++ { ++ settings = gtk_settings_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (impl))); ++ priv->settings_signal_id = g_signal_connect (settings, "notify", ++ G_CALLBACK (settings_notify_cb), impl); ++ ++ change_icon_theme (impl); ++ } ++ ++ profile_end ("end", NULL); ++} ++ ++static void ++gtk_file_chooser_widget_style_updated (GtkWidget *widget) ++{ ++ GtkFileChooserWidget *impl; ++ ++ profile_start ("start", NULL); ++ ++ impl = GTK_FILE_CHOOSER_WIDGET (widget); ++ ++ profile_msg (" parent class style_udpated start", NULL); ++ GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->style_updated (widget); ++ profile_msg (" parent class style_updated end", NULL); ++ ++ if (gtk_widget_has_screen (GTK_WIDGET (impl))) ++ change_icon_theme (impl); ++ ++ emit_default_size_changed (impl); ++ ++ profile_end ("end", NULL); ++} ++ ++static void ++gtk_file_chooser_widget_screen_changed (GtkWidget *widget, ++ GdkScreen *previous_screen) ++{ ++ GtkFileChooserWidget *impl; ++ ++ profile_start ("start", NULL); ++ ++ impl = GTK_FILE_CHOOSER_WIDGET (widget); ++ ++ if (GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->screen_changed) ++ GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->screen_changed (widget, previous_screen); ++ ++ remove_settings_signal (impl, previous_screen); ++ check_icon_theme (impl); ++ ++ emit_default_size_changed (impl); ++ ++ profile_end ("end", NULL); ++} ++ ++static void ++set_sort_column (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSortable *sortable; ++ ++ sortable = GTK_TREE_SORTABLE (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view))); ++ ++ /* can happen when we're still populating the model */ ++ if (sortable == NULL) ++ return; ++ ++ gtk_tree_sortable_set_sort_column_id (sortable, ++ priv->sort_column, ++ priv->sort_order); ++} ++ ++static void ++settings_load (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean show_hidden; ++ gboolean show_size_column; ++ gboolean show_type_column; ++ gboolean sort_directories_first; ++ DateFormat date_format; ++ TypeFormat type_format; ++ gint sort_column; ++ GtkSortType sort_order; ++ StartupMode startup_mode; ++ gint sidebar_width; ++ GSettings *settings; ++ ++ settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl)); ++ ++ show_hidden = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN); ++ show_size_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN); ++ show_type_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN); ++ sort_column = g_settings_get_enum (settings, SETTINGS_KEY_SORT_COLUMN); ++ sort_order = g_settings_get_enum (settings, SETTINGS_KEY_SORT_ORDER); ++ sidebar_width = g_settings_get_int (settings, SETTINGS_KEY_SIDEBAR_WIDTH); ++ startup_mode = g_settings_get_enum (settings, SETTINGS_KEY_STARTUP_MODE); ++ sort_directories_first = g_settings_get_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST); ++ date_format = g_settings_get_enum (settings, SETTINGS_KEY_DATE_FORMAT); ++ type_format = g_settings_get_enum (settings, SETTINGS_KEY_TYPE_FORMAT); ++ ++ if (!priv->show_hidden_set) ++ set_show_hidden (impl, show_hidden); ++ priv->show_size_column = show_size_column; ++ gtk_tree_view_column_set_visible (priv->list_size_column, show_size_column); ++ priv->show_type_column = show_type_column; ++ gtk_tree_view_column_set_visible (priv->list_type_column, show_type_column); ++ ++ priv->sort_column = sort_column; ++ priv->sort_order = sort_order; ++ priv->startup_mode = startup_mode; ++ priv->sort_directories_first = sort_directories_first; ++ priv->show_time = date_format == DATE_FORMAT_WITH_TIME; ++ priv->type_format = type_format; ++ ++ /* We don't call set_sort_column() here as the models may not have been ++ * created yet. The individual functions that create and set the models will ++ * call set_sort_column() themselves. ++ */ ++ ++ update_time_renderer_visible (impl); ++ gtk_paned_set_position (GTK_PANED (priv->browse_widgets_hpaned), sidebar_width); ++} ++ ++static void ++settings_save (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GSettings *settings; ++ ++ settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl)); ++ ++ /* All the other state */ ++ ++ g_settings_set_enum (settings, SETTINGS_KEY_LOCATION_MODE, priv->location_mode); ++ g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN, ++ gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl))); ++ g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, priv->show_size_column); ++ g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN, priv->show_type_column); ++ g_settings_set_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST, priv->sort_directories_first); ++ g_settings_set_enum (settings, SETTINGS_KEY_SORT_COLUMN, priv->sort_column); ++ g_settings_set_enum (settings, SETTINGS_KEY_SORT_ORDER, priv->sort_order); ++ g_settings_set_int (settings, SETTINGS_KEY_SIDEBAR_WIDTH, ++ gtk_paned_get_position (GTK_PANED (priv->browse_widgets_hpaned))); ++ g_settings_set_enum (settings, SETTINGS_KEY_DATE_FORMAT, priv->show_time ? DATE_FORMAT_WITH_TIME : DATE_FORMAT_REGULAR); ++ g_settings_set_enum (settings, SETTINGS_KEY_TYPE_FORMAT, priv->type_format); ++ ++ /* Now apply the settings */ ++ g_settings_apply (settings); ++} ++ ++/* GtkWidget::realize method */ ++static void ++gtk_file_chooser_widget_realize (GtkWidget *widget) ++{ ++ GtkFileChooserWidget *impl; ++ ++ impl = GTK_FILE_CHOOSER_WIDGET (widget); ++ ++ GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->realize (widget); ++ ++ emit_default_size_changed (impl); ++} ++ ++/* Changes the current folder to $CWD */ ++static void ++switch_to_cwd (GtkFileChooserWidget *impl) ++{ ++ char *current_working_dir; ++ ++ current_working_dir = g_get_current_dir (); ++ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), current_working_dir); ++ g_free (current_working_dir); ++} ++ ++static gboolean ++recent_files_setting_is_enabled (GtkFileChooserWidget *impl) ++{ ++ GtkSettings *settings; ++ gboolean enabled; ++ ++ settings = gtk_widget_get_settings (GTK_WIDGET (impl)); ++ g_object_get (settings, "gtk-recent-files-enabled", &enabled, NULL); ++ return enabled; ++} ++ ++/* Sets the file chooser to showing Recent Files or $CWD, depending on the ++ * user’s settings. ++ */ ++static void ++set_startup_mode (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkRevealerTransitionType revealer_transition; ++ GtkStackTransitionType stack_transition; ++ ++ /* turn off animations for this setup */ ++ revealer_transition ++ = gtk_revealer_get_transition_type (GTK_REVEALER (priv->browse_header_revealer)); ++ gtk_revealer_set_transition_type (GTK_REVEALER (priv->browse_header_revealer), ++ GTK_REVEALER_TRANSITION_TYPE_NONE); ++ stack_transition ++ = gtk_stack_get_transition_type (GTK_STACK (priv->browse_header_stack)); ++ gtk_stack_set_transition_type (GTK_STACK (priv->browse_header_stack), ++ GTK_STACK_TRANSITION_TYPE_NONE); ++ ++ switch (priv->startup_mode) ++ { ++ case STARTUP_MODE_RECENT: ++ if (gtk_places_sidebar_get_show_recent (GTK_PLACES_SIDEBAR (priv->places_sidebar))) ++ { ++ operation_mode_set (impl, OPERATION_MODE_RECENT); ++ break; ++ } ++ /* else fall thru */ ++ ++ case STARTUP_MODE_CWD: ++ switch_to_cwd (impl); ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ } ++ ++ gtk_stack_set_transition_type (GTK_STACK (priv->browse_header_stack), ++ stack_transition); ++ gtk_revealer_set_transition_type (GTK_REVEALER (priv->browse_header_revealer), ++ revealer_transition); ++} ++ ++static gboolean ++shortcut_exists (GtkFileChooserWidget *impl, GFile *needle) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GSList *haystack; ++ GSList *l; ++ gboolean exists; ++ ++ exists = FALSE; ++ ++ haystack = gtk_places_sidebar_list_shortcuts (GTK_PLACES_SIDEBAR (priv->places_sidebar)); ++ for (l = haystack; l; l = l->next) ++ { ++ GFile *hay; ++ ++ hay = G_FILE (l->data); ++ if (g_file_equal (hay, needle)) ++ { ++ exists = TRUE; ++ break; ++ } ++ } ++ g_slist_free_full (haystack, g_object_unref); ++ ++ return exists; ++} ++ ++static void ++add_cwd_to_sidebar_if_needed (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ char *cwd; ++ GFile *cwd_file; ++ GFile *home_file; ++ ++ cwd = g_get_current_dir (); ++ cwd_file = g_file_new_for_path (cwd); ++ g_free (cwd); ++ ++ if (shortcut_exists (impl, cwd_file)) ++ goto out; ++ ++ home_file = g_file_new_for_path (g_get_home_dir ()); ++ ++ /* We only add an item for $CWD if it is different from $HOME. This way, ++ * applications which get launched from a shell in a terminal (by someone who ++ * knows what they are doing) will get an item for $CWD in the places sidebar, ++ * and "normal" applications launched from the desktop shell (whose $CWD is ++ * $HOME) won't get any extra clutter in the sidebar. ++ */ ++ if (!g_file_equal (home_file, cwd_file)) ++ gtk_places_sidebar_add_shortcut (GTK_PLACES_SIDEBAR (priv->places_sidebar), cwd_file); ++ ++ g_object_unref (home_file); ++ ++ out: ++ g_object_unref (cwd_file); ++} ++ ++/* GtkWidget::map method */ ++static void ++gtk_file_chooser_widget_map (GtkWidget *widget) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (widget); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ profile_start ("start", NULL); ++ ++ priv->browse_files_interaction_frozen = FALSE; ++ ++ GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->map (widget); ++ ++ settings_load (impl); ++ ++ add_cwd_to_sidebar_if_needed (impl); ++ ++ if (priv->operation_mode == OPERATION_MODE_BROWSE) ++ { ++ switch (priv->reload_state) ++ { ++ case RELOAD_EMPTY: ++ set_startup_mode (impl); ++ break; ++ ++ case RELOAD_HAS_FOLDER: ++ /* Nothing; we are already loading or loaded, so we ++ * don't need to reload ++ */ ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ } ++ } ++ ++ profile_end ("end", NULL); ++} ++ ++/* GtkWidget::unmap method */ ++static void ++gtk_file_chooser_widget_unmap (GtkWidget *widget) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (widget); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ settings_save (impl); ++ ++ cancel_all_operations (impl); ++ priv->reload_state = RELOAD_EMPTY; ++ ++ GTK_WIDGET_CLASS (gtk_file_chooser_widget_parent_class)->unmap (widget); ++} ++ ++static gint ++compare_directory (GtkFileSystemModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean dir_a, dir_b; ++ ++ dir_a = g_value_get_boolean (_gtk_file_system_model_get_value (model, a, MODEL_COL_IS_FOLDER)); ++ dir_b = g_value_get_boolean (_gtk_file_system_model_get_value (model, b, MODEL_COL_IS_FOLDER)); ++ ++ if (priv->sort_directories_first && dir_a != dir_b) ++ return priv->list_sort_ascending ? (dir_a ? -1 : 1) : (dir_a ? 1 : -1); ++ ++ return 0; ++} ++ ++static gint ++compare_name (GtkFileSystemModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ GtkFileChooserWidget *impl) ++{ ++ const char *key_a, *key_b; ++ gint result; ++ ++ key_a = g_value_get_string (_gtk_file_system_model_get_value (model, a, MODEL_COL_NAME_COLLATED)); ++ key_b = g_value_get_string (_gtk_file_system_model_get_value (model, b, MODEL_COL_NAME_COLLATED)); ++ ++ if (key_a && key_b) ++ result = strcmp (key_a, key_b); ++ else if (key_a) ++ result = 1; ++ else if (key_b) ++ result = -1; ++ else ++ result = 0; ++ ++ return result; ++} ++ ++static gint ++compare_size (GtkFileSystemModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ GtkFileChooserWidget *impl) ++{ ++ gint64 size_a, size_b; ++ ++ size_a = g_value_get_int64 (_gtk_file_system_model_get_value (model, a, MODEL_COL_SIZE)); ++ size_b = g_value_get_int64 (_gtk_file_system_model_get_value (model, b, MODEL_COL_SIZE)); ++ ++ return size_a < size_b ? -1 : (size_a == size_b ? 0 : 1); ++} ++ ++static gint ++compare_type (GtkFileSystemModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ GtkFileChooserWidget *impl) ++{ ++ const char *key_a, *key_b; ++ ++ key_a = g_value_get_string (_gtk_file_system_model_get_value (model, a, MODEL_COL_TYPE)); ++ key_b = g_value_get_string (_gtk_file_system_model_get_value (model, b, MODEL_COL_TYPE)); ++ ++ return g_strcmp0 (key_a, key_b); ++} ++ ++static gint ++compare_time (GtkFileSystemModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ GtkFileChooserWidget *impl) ++{ ++ glong ta, tb; ++ ++ ta = g_value_get_long (_gtk_file_system_model_get_value (model, a, MODEL_COL_TIME)); ++ tb = g_value_get_long (_gtk_file_system_model_get_value (model, b, MODEL_COL_TIME)); ++ ++ return ta < tb ? -1 : (ta == tb ? 0 : 1); ++} ++ ++static gint ++compare_location (GtkFileSystemModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ GtkFileChooserWidget *impl) ++{ ++ const char *key_a, *key_b; ++ ++ key_a = g_value_get_string (_gtk_file_system_model_get_value (model, a, MODEL_COL_LOCATION_TEXT)); ++ key_b = g_value_get_string (_gtk_file_system_model_get_value (model, b, MODEL_COL_LOCATION_TEXT)); ++ ++ return g_strcmp0 (key_a, key_b); ++} ++ ++/* Sort callback for the filename column */ ++static gint ++name_sort_func (GtkTreeModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ gpointer user_data) ++{ ++ GtkFileSystemModel *fs_model = GTK_FILE_SYSTEM_MODEL (model); ++ GtkFileChooserWidget *impl = user_data; ++ gint result; ++ ++ result = compare_directory (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_name (fs_model, a, b, impl); ++ ++ return result; ++} ++ ++/* Sort callback for the size column */ ++static gint ++size_sort_func (GtkTreeModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ gpointer user_data) ++{ ++ GtkFileSystemModel *fs_model = GTK_FILE_SYSTEM_MODEL (model); ++ GtkFileChooserWidget *impl = user_data; ++ gint result; ++ ++ result = compare_directory (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_size (fs_model, a, b, impl); ++ ++ return result; ++} ++ ++/* Sort callback for the type column */ ++static gint ++type_sort_func (GtkTreeModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ gpointer user_data) ++{ ++ GtkFileSystemModel *fs_model = GTK_FILE_SYSTEM_MODEL (model); ++ GtkFileChooserWidget *impl = user_data; ++ gint result; ++ ++ result = compare_directory (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_type (fs_model, a, b, impl); ++ ++ return result; ++} ++ ++/* Sort callback for the time column */ ++static gint ++time_sort_func (GtkTreeModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ gpointer user_data) ++{ ++ GtkFileSystemModel *fs_model = GTK_FILE_SYSTEM_MODEL (model); ++ GtkFileChooserWidget *impl = user_data; ++ gint result; ++ ++ result = compare_directory (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_time (fs_model, a, b, impl); ++ ++ return result; ++} ++ ++static gint ++recent_sort_func (GtkTreeModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ gpointer user_data) ++{ ++ GtkFileSystemModel *fs_model = GTK_FILE_SYSTEM_MODEL (model); ++ GtkFileChooserWidget *impl = user_data; ++ gint result; ++ ++ result = compare_time (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_name (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_location (fs_model, a, b, impl); ++ ++ return result; ++} ++ ++static gint ++search_sort_func (GtkTreeModel *model, ++ GtkTreeIter *a, ++ GtkTreeIter *b, ++ gpointer user_data) ++{ ++ GtkFileSystemModel *fs_model = GTK_FILE_SYSTEM_MODEL (model); ++ GtkFileChooserWidget *impl = user_data; ++ gint result; ++ ++ result = compare_location (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_name (fs_model, a, b, impl); ++ ++ if (result == 0) ++ result = compare_time (fs_model, a, b, impl); ++ ++ return result; ++} ++ ++/* Callback used when the sort column changes. We cache the sort order for use ++ * in name_sort_func(). ++ */ ++static void ++list_sort_column_changed_cb (GtkTreeSortable *sortable, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gint sort_column_id; ++ GtkSortType sort_type; ++ ++ if (gtk_tree_sortable_get_sort_column_id (sortable, &sort_column_id, &sort_type)) ++ { ++ priv->list_sort_ascending = (sort_type == GTK_SORT_ASCENDING); ++ priv->sort_column = sort_column_id; ++ priv->sort_order = sort_type; ++ } ++} ++ ++static void ++set_busy_cursor (GtkFileChooserWidget *impl, ++ gboolean busy) ++{ ++ GtkWidget *widget; ++ GtkWindow *toplevel; ++ GdkDisplay *display; ++ GdkCursor *cursor; ++ ++ toplevel = get_toplevel (GTK_WIDGET (impl)); ++ widget = GTK_WIDGET (toplevel); ++ if (!toplevel || !gtk_widget_get_realized (widget)) ++ return; ++ ++ display = gtk_widget_get_display (widget); ++ ++ if (busy) ++ cursor = gdk_cursor_new_from_name (display, "progress"); ++ else ++ cursor = NULL; ++ ++ gdk_window_set_cursor (gtk_widget_get_window (widget), cursor); ++ gdk_display_flush (display); ++ ++ if (cursor) ++ g_object_unref (cursor); ++} ++ ++static void ++update_columns (GtkFileChooserWidget *impl, ++ gboolean location_visible, ++ const gchar *time_title) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean need_resize = FALSE; ++ ++ if (gtk_tree_view_column_get_visible (priv->list_location_column) != location_visible) ++ { ++ gtk_tree_view_column_set_visible (priv->list_location_column, location_visible); ++ need_resize = TRUE; ++ } ++ ++ if (g_strcmp0 (gtk_tree_view_column_get_title (priv->list_time_column), time_title) != 0) ++ { ++ gtk_tree_view_column_set_title (priv->list_time_column, time_title); ++ need_resize = TRUE; ++ } ++ ++ if (need_resize) ++ { ++ /* This undoes user resizing of columns when the columns change. */ ++ gtk_tree_view_column_set_expand (priv->list_name_column, TRUE); ++ gtk_tree_view_column_set_expand (priv->list_location_column, TRUE); ++ gtk_tree_view_columns_autosize (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ } ++} ++ ++/* Creates a sort model to wrap the file system model and sets it on the tree view */ ++static void ++load_set_model (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ profile_start ("start", NULL); ++ ++ g_assert (priv->browse_files_model != NULL); ++ ++ profile_msg (" gtk_tree_view_set_model start", NULL); ++ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ GTK_TREE_MODEL (priv->browse_files_model)); ++ update_columns (impl, FALSE, _("Modified")); ++ file_list_set_sort_column_ids (impl); ++ set_sort_column (impl); ++ profile_msg (" gtk_tree_view_set_model end", NULL); ++ priv->list_sort_ascending = TRUE; ++ ++ g_set_object (&priv->model_for_search, priv->browse_files_model); ++ ++ profile_end ("end", NULL); ++} ++ ++/* Timeout callback used when the loading timer expires */ ++static gboolean ++load_timeout_cb (gpointer data) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ profile_start ("start", NULL); ++ ++ g_assert (priv->load_state == LOAD_PRELOAD); ++ g_assert (priv->load_timeout_id != 0); ++ g_assert (priv->browse_files_model != NULL); ++ ++ priv->load_timeout_id = 0; ++ priv->load_state = LOAD_LOADING; ++ ++ load_set_model (impl); ++ ++ profile_end ("end", NULL); ++ ++ return FALSE; ++} ++ ++/* Sets up a new load timer for the model and switches to the LOAD_PRELOAD state */ ++static void ++load_setup_timer (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_assert (priv->load_timeout_id == 0); ++ g_assert (priv->load_state != LOAD_PRELOAD); ++ ++ priv->load_timeout_id = gdk_threads_add_timeout (MAX_LOADING_TIME, load_timeout_cb, impl); ++ g_source_set_name_by_id (priv->load_timeout_id, "[gtk+] load_timeout_cb"); ++ priv->load_state = LOAD_PRELOAD; ++} ++ ++/* Removes the load timeout; changes the impl->load_state to the specified value. */ ++static void ++load_remove_timer (GtkFileChooserWidget *impl, LoadState new_load_state) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->load_timeout_id != 0) ++ { ++ g_assert (priv->load_state == LOAD_PRELOAD); ++ ++ g_source_remove (priv->load_timeout_id); ++ priv->load_timeout_id = 0; ++ } ++ else ++ g_assert (priv->load_state == LOAD_EMPTY || ++ priv->load_state == LOAD_LOADING || ++ priv->load_state == LOAD_FINISHED); ++ ++ g_assert (new_load_state == LOAD_EMPTY || ++ new_load_state == LOAD_LOADING || ++ new_load_state == LOAD_FINISHED); ++ priv->load_state = new_load_state; ++} ++ ++/* Selects the first row in the file list */ ++static void ++browse_files_select_first_row (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreePath *path; ++ GtkTreeIter dummy_iter; ++ GtkTreeModel *tree_model; ++ ++ tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ ++ if (!tree_model) ++ return; ++ ++ path = gtk_tree_path_new_from_indices (0, -1); ++ ++ /* If the list is empty, do nothing. */ ++ if (gtk_tree_model_get_iter (tree_model, &dummy_iter, path)) ++ { ++ /* Although the following call to gtk_tree_view_set_cursor() is intended to ++ * only change the focus to the first row (not select it), GtkTreeView *will* ++ * select the row anyway due to bug #492206. So, we'll use a flag to ++ * keep our own callbacks from changing the location_entry when the selection ++ * is changed. This entire function, browse_files_select_first_row(), may ++ * go away when that bug is fixed in GtkTreeView. ++ */ ++ priv->auto_selecting_first_row = TRUE; ++ ++ gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->browse_files_tree_view), path, NULL, FALSE); ++ ++ priv->auto_selecting_first_row = FALSE; ++ } ++ gtk_tree_path_free (path); ++} ++ ++struct center_selected_row_closure { ++ GtkFileChooserWidget *impl; ++ gboolean already_centered; ++}; ++ ++/* Callback used from gtk_tree_selection_selected_foreach(); centers the ++ * selected row in the tree view. ++ */ ++static void ++center_selected_row_foreach_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ struct center_selected_row_closure *closure; ++ ++ closure = data; ++ if (closure->already_centered) ++ return; ++ ++ gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (closure->impl->priv->browse_files_tree_view), path, NULL, TRUE, 0.5, 0.0); ++ closure->already_centered = TRUE; ++} ++ ++/* Centers the selected row in the tree view */ ++static void ++browse_files_center_selected_row (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ struct center_selected_row_closure closure; ++ GtkTreeSelection *selection; ++ ++ closure.impl = impl; ++ closure.already_centered = FALSE; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, center_selected_row_foreach_cb, &closure); ++} ++ ++static gboolean ++show_and_select_files (GtkFileChooserWidget *impl, ++ GSList *files) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ GtkFileSystemModel *fsmodel; ++ gboolean enabled_hidden, removed_filters; ++ gboolean selected_a_file; ++ GSList *walk; ++ ++ g_assert (priv->load_state == LOAD_FINISHED); ++ g_assert (priv->browse_files_model != NULL); ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ fsmodel = GTK_FILE_SYSTEM_MODEL (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view))); ++ ++ g_assert (fsmodel == priv->browse_files_model); ++ ++ enabled_hidden = priv->show_hidden; ++ removed_filters = (priv->current_filter == NULL); ++ ++ selected_a_file = FALSE; ++ ++ for (walk = files; walk; walk = walk->next) ++ { ++ GFile *file = walk->data; ++ GtkTreeIter iter; ++ ++ /* Is it a hidden file? */ ++ ++ if (!_gtk_file_system_model_get_iter_for_file (fsmodel, &iter, file)) ++ continue; ++ ++ if (!_gtk_file_system_model_iter_is_visible (fsmodel, &iter)) ++ { ++ GFileInfo *info = _gtk_file_system_model_get_info (fsmodel, &iter); ++ gboolean has_is_hidden = g_file_info_has_attribute (info, "standard::is-hidden"); ++ gboolean has_is_backup = g_file_info_has_attribute (info, "standard::is-backup"); ++ ++ if (!enabled_hidden && ++ ((has_is_hidden && g_file_info_get_is_hidden (info)) || ++ (has_is_backup && g_file_info_get_is_backup (info)))) ++ { ++ g_object_set (impl, "show-hidden", TRUE, NULL); ++ enabled_hidden = TRUE; ++ } ++ } ++ ++ /* Is it a filtered file? */ ++ ++ if (!_gtk_file_system_model_get_iter_for_file (fsmodel, &iter, file)) ++ continue; /* re-get the iter as it may change when the model refilters */ ++ ++ if (!_gtk_file_system_model_iter_is_visible (fsmodel, &iter)) ++ { ++ /* Maybe we should have a way to ask the fsmodel if it had filtered a file */ ++ if (!removed_filters) ++ { ++ set_current_filter (impl, NULL); ++ removed_filters = TRUE; ++ } ++ } ++ ++ /* Okay, can we select the file now? */ ++ if (!_gtk_file_system_model_get_iter_for_file (fsmodel, &iter, file)) ++ continue; ++ ++ if (_gtk_file_system_model_iter_is_visible (fsmodel, &iter)) ++ { ++ GtkTreePath *path; ++ ++ gtk_tree_selection_select_iter (selection, &iter); ++ ++ path = gtk_tree_model_get_path (GTK_TREE_MODEL (fsmodel), &iter); ++ gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ path, NULL, FALSE); ++ gtk_tree_path_free (path); ++ ++ selected_a_file = TRUE; ++ } ++ } ++ ++ browse_files_center_selected_row (impl); ++ ++ return selected_a_file; ++} ++ ++/* Processes the pending operation when a folder is finished loading */ ++static void ++pending_select_files_process (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_assert (priv->load_state == LOAD_FINISHED); ++ g_assert (priv->browse_files_model != NULL); ++ ++ if (priv->pending_select_files) ++ { ++ show_and_select_files (impl, priv->pending_select_files); ++ pending_select_files_free (impl); ++ browse_files_center_selected_row (impl); ++ } ++ else ++ { ++ /* We only select the first row if the chooser is actually mapped --- ++ * selecting the first row is to help the user when he is interacting with ++ * the chooser, but sometimes a chooser works not on behalf of the user, ++ * but rather on behalf of something else like GtkFileChooserButton. In ++ * that case, the chooser's selection should be what the caller expects, ++ * as the user can't see that something else got selected. See bug #165264. ++ */ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN && ++ gtk_widget_get_mapped (GTK_WIDGET (impl))) ++ browse_files_select_first_row (impl); ++ } ++ ++ g_assert (priv->pending_select_files == NULL); ++} ++ ++static void ++show_error_on_reading_current_folder (GtkFileChooserWidget *impl, GError *error) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFileInfo *info; ++ char *msg; ++ ++ info = g_file_query_info (priv->current_folder, ++ G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, ++ G_FILE_QUERY_INFO_NONE, ++ NULL, ++ NULL); ++ if (info) ++ { ++ msg = g_strdup_printf (_("Could not read the contents of %s"), g_file_info_get_display_name (info)); ++ g_object_unref (info); ++ } ++ else ++ msg = g_strdup (_("Could not read the contents of the folder")); ++ ++ error_message (impl, msg, error->message); ++ g_free (msg); ++} ++ ++/* Callback used when the file system model finishes loading */ ++static void ++browse_files_model_finished_loading_cb (GtkFileSystemModel *model, ++ GError *error, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ profile_start ("start", NULL); ++ ++ if (error) ++ { ++ set_busy_cursor (impl, FALSE); ++ show_error_on_reading_current_folder (impl, error); ++ } ++ ++ if (priv->load_state == LOAD_PRELOAD) ++ { ++ load_remove_timer (impl, LOAD_FINISHED); ++ load_set_model (impl); ++ } ++ else if (priv->load_state == LOAD_LOADING) ++ { ++ /* Nothing */ ++ } ++ else ++ { ++ /* We can't g_assert_not_reached(), as something other than us may have ++ * initiated a folder reload. See #165556. ++ */ ++ profile_end ("end", NULL); ++ return; ++ } ++ ++ g_assert (priv->load_timeout_id == 0); ++ ++ priv->load_state = LOAD_FINISHED; ++ ++ pending_select_files_process (impl); ++ set_busy_cursor (impl, FALSE); ++#ifdef PROFILE_FILE_CHOOSER ++ access ("MARK: *** FINISHED LOADING", F_OK); ++#endif ++ ++ profile_end ("end", NULL); ++} ++ ++/* Callback used when file system model adds or updates a file. ++ * We detect here when a new renamed file appears and reveal it */ ++static void ++browse_files_model_row_changed_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *file; ++ GSList files; ++ ++ if (priv->renamed_file) ++ { ++ gtk_tree_model_get (model, iter, MODEL_COL_FILE, &file, -1); ++ if (g_file_equal (priv->renamed_file, file)) ++ { ++ g_clear_object (&priv->renamed_file); ++ ++ files.data = (gpointer) file; ++ files.next = NULL; ++ ++ show_and_select_files (impl, &files); ++ } ++ ++ g_object_unref (file); ++ } ++} ++ ++static void ++stop_loading_and_clear_list_model (GtkFileChooserWidget *impl, ++ gboolean remove) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ load_remove_timer (impl, LOAD_EMPTY); ++ ++ g_set_object (&priv->browse_files_model, NULL); ++ ++ if (remove) ++ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view), NULL); ++} ++ ++/* Replace 'target' with 'replacement' in the input string. */ ++static gchar * ++string_replace (const gchar *input, ++ const gchar *target, ++ const gchar *replacement) ++{ ++ gchar **pieces; ++ gchar *output; ++ ++ pieces = g_strsplit (input, target, -1); ++ output = g_strjoinv (replacement, pieces); ++ g_strfreev (pieces); ++ ++ return output; ++} ++ ++static void ++replace_ratio (gchar **str) ++{ ++ if (g_get_charset (NULL)) ++ { ++ gchar *ret; ++ ret = string_replace (*str, ":", "\xE2\x80\x8E∶"); ++ g_free (*str); ++ *str = ret; ++ } ++} ++ ++static char * ++my_g_format_date_for_display (GtkFileChooserWidget *impl, ++ glong secs) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GDateTime *now, *time; ++ GDateTime *now_date, *date; ++ ClockFormat clock_format; ++ const gchar *format; ++ gchar *date_str; ++ GSettings *settings; ++ gint days_ago; ++ ++ time = g_date_time_new_from_unix_local (secs); ++ date = g_date_time_new_local (g_date_time_get_year (time), ++ g_date_time_get_month (time), ++ g_date_time_get_day_of_month (time), ++ 0, 0, 0); ++ ++ settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl)); ++ clock_format = g_settings_get_enum (settings, "clock-format"); ++ ++ now = g_date_time_new_now_local (); ++ now_date = g_date_time_new_local (g_date_time_get_year (now), ++ g_date_time_get_month (now), ++ g_date_time_get_day_of_month (now), ++ 0, 0, 0); ++ days_ago = g_date_time_difference (now_date, date) / G_TIME_SPAN_DAY; ++ ++ /* Translators: see g_date_time_format() for details on the format */ ++ if (days_ago < 1) ++ { ++ if (priv->show_time) ++ format = ""; ++ else if (clock_format == CLOCK_FORMAT_24) ++ format = _("%H:%M"); ++ else ++ format = _("%l:%M %p"); ++ } ++ else if (days_ago < 2) ++ { ++ format = _("Yesterday"); ++ } ++ else if (days_ago < 7) ++ { ++ format = "%a"; /* Days from last week */ ++ } ++ else if (g_date_time_get_year (now) == g_date_time_get_year (time)) ++ { ++ format = _("%-e %b"); ++ } ++ else ++ { ++ format = N_("%-e %b %Y"); ++ } ++ ++ date_str = g_date_time_format (time, format); ++ replace_ratio (&date_str); ++ ++ g_date_time_unref (now); ++ g_date_time_unref (now_date); ++ g_date_time_unref (time); ++ g_date_time_unref (date); ++ ++ return date_str; ++} ++ ++static char * ++my_g_format_time_for_display (GtkFileChooserWidget *impl, ++ glong secs) ++{ ++ GDateTime *time; ++ ClockFormat clock_format; ++ const gchar *format; ++ gchar *date_str; ++ GSettings *settings; ++ ++ time = g_date_time_new_from_unix_local (secs); ++ ++ settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl)); ++ clock_format = g_settings_get_enum (settings, "clock-format"); ++ ++ if (clock_format == CLOCK_FORMAT_24) ++ format = _("%H:%M"); ++ else ++ format = _("%l:%M %p"); ++ ++ date_str = g_date_time_format (time, format); ++ replace_ratio (&date_str); ++ ++ g_date_time_unref (time); ++ ++ return date_str; ++} ++ ++static void ++copy_attribute (GFileInfo *to, ++ GFileInfo *from, ++ const gchar *attribute) ++{ ++ GFileAttributeType type; ++ gpointer value; ++ ++ if (g_file_info_get_attribute_data (from, attribute, &type, &value, NULL)) ++ g_file_info_set_attribute (to, attribute, type, value); ++} ++ ++static void ++file_system_model_got_thumbnail (GObject *object, ++ GAsyncResult *res, ++ gpointer data) ++{ ++ GtkFileSystemModel *model = data; /* might be unreffed if operation was cancelled */ ++ GFile *file = G_FILE (object); ++ GFileInfo *queried, *info; ++ GtkTreeIter iter; ++ ++ queried = g_file_query_info_finish (file, res, NULL); ++ if (queried == NULL) ++ return; ++ ++ gdk_threads_enter (); ++ ++ /* now we know model is valid */ ++ ++ /* file was deleted */ ++ if (!_gtk_file_system_model_get_iter_for_file (model, &iter, file)) ++ { ++ g_object_unref (queried); ++ gdk_threads_leave (); ++ return; ++ } ++ ++ info = g_file_info_dup (_gtk_file_system_model_get_info (model, &iter)); ++ ++ copy_attribute (info, queried, G_FILE_ATTRIBUTE_THUMBNAIL_PATH); ++ copy_attribute (info, queried, G_FILE_ATTRIBUTE_THUMBNAILING_FAILED); ++ copy_attribute (info, queried, G_FILE_ATTRIBUTE_STANDARD_ICON); ++ ++ _gtk_file_system_model_update_file (model, file, info); ++ ++ g_object_unref (info); ++ g_object_unref (queried); ++ ++ gdk_threads_leave (); ++} ++ ++/* Copied from src/nautilus_file.c:get_description() */ ++struct { ++ const char *icon_name; ++ const char *display_name; ++} mime_type_map[] = { ++ { "application-x-executable", N_("Program") }, ++ { "audio-x-generic", N_("Audio") }, ++ { "font-x-generic", N_("Font") }, ++ { "image-x-generic", N_("Image") }, ++ { "package-x-generic", N_("Archive") }, ++ { "text-html", N_("Markup") }, ++ { "text-x-generic", N_("Text") }, ++ { "text-x-generic-template", N_("Text") }, ++ { "text-x-script", N_("Program") }, ++ { "video-x-generic", N_("Video") }, ++ { "x-office-address-book", N_("Contacts") }, ++ { "x-office-calendar", N_("Calendar") }, ++ { "x-office-document", N_("Document") }, ++ { "x-office-presentation", N_("Presentation") }, ++ { "x-office-spreadsheet", N_("Spreadsheet") }, ++}; ++ ++static char * ++get_category_from_content_type (const char *content_type) ++{ ++ char *icon_name; ++ char *basic_type = NULL; ++ ++ icon_name = g_content_type_get_generic_icon_name (content_type); ++ if (icon_name != NULL) ++ { ++ int i; ++ ++ for (i = 0; i < G_N_ELEMENTS (mime_type_map); i++) ++ { ++ if (strcmp (mime_type_map[i].icon_name, icon_name) == 0) ++ { ++ basic_type = g_strdup (_(mime_type_map[i].display_name)); ++ break; ++ } ++ } ++ ++ g_free (icon_name); ++ } ++ ++ if (basic_type == NULL) ++ { ++ basic_type = g_content_type_get_description (content_type); ++ if (basic_type == NULL) ++ { ++ basic_type = g_strdup (_("Unknown")); ++ } ++ } ++ ++ return basic_type; ++} ++ ++static char * ++get_type_information (GtkFileChooserWidget *impl, ++ GFileInfo *info) ++{ ++ const char *content_type; ++ char *mime_type; ++ char *description; ++ ++ content_type = g_file_info_get_content_type (info); ++ if (!content_type) ++ content_type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE); ++ if (!content_type) ++ goto end; ++ ++ switch (impl->priv->type_format) ++ { ++ case TYPE_FORMAT_MIME: ++ mime_type = g_content_type_get_mime_type (content_type); ++ return mime_type ? mime_type : g_strdup (content_type); ++ ++ case TYPE_FORMAT_DESCRIPTION: ++ description = g_content_type_get_description (content_type); ++ return description ? description : g_strdup (content_type); ++ ++ case TYPE_FORMAT_CATEGORY: ++ return get_category_from_content_type (content_type); ++ ++ default: ++ g_assert_not_reached (); ++ } ++ ++end: ++ return g_strdup (""); ++} ++ ++static gboolean ++file_system_model_set (GtkFileSystemModel *model, ++ GFile *file, ++ GFileInfo *info, ++ int column, ++ GValue *value, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ switch (column) ++ { ++ case MODEL_COL_FILE: ++ g_value_set_object (value, file); ++ break; ++ case MODEL_COL_NAME: ++ if (info == NULL) ++ g_value_set_string (value, DEFAULT_NEW_FOLDER_NAME); ++ else ++ g_value_set_string (value, g_file_info_get_display_name (info)); ++ break; ++ case MODEL_COL_NAME_COLLATED: ++ if (info == NULL) ++ g_value_take_string (value, g_utf8_collate_key_for_filename (DEFAULT_NEW_FOLDER_NAME, -1)); ++ else ++ g_value_take_string (value, g_utf8_collate_key_for_filename (g_file_info_get_display_name (info), -1)); ++ break; ++ case MODEL_COL_IS_FOLDER: ++ g_value_set_boolean (value, info == NULL || _gtk_file_info_consider_as_directory (info)); ++ break; ++ case MODEL_COL_IS_SENSITIVE: ++ if (info) ++ { ++ gboolean sensitive = TRUE; ++ ++ if (!(priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ++ || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)) ++ { ++ sensitive = TRUE; /* for file modes... */ ++ } ++ else if (!_gtk_file_info_consider_as_directory (info)) ++ { ++ sensitive = FALSE; /* for folder modes, files are not sensitive... */ ++ } ++ else ++ { ++ /* ... and for folder modes, folders are sensitive only if the filter says so */ ++ GtkTreeIter iter; ++ if (!_gtk_file_system_model_get_iter_for_file (model, &iter, file)) ++ g_assert_not_reached (); ++ sensitive = !_gtk_file_system_model_iter_is_filtered_out (model, &iter); ++ } ++ ++ g_value_set_boolean (value, sensitive); ++ } ++ else ++ g_value_set_boolean (value, TRUE); ++ break; ++ case MODEL_COL_SURFACE: ++ if (info) ++ { ++ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_ICON)) ++ { ++ g_value_take_boxed (value, _gtk_file_info_render_icon (info, GTK_WIDGET (impl), priv->icon_size)); ++ } ++ else ++ { ++ GtkTreeModel *tree_model; ++ GtkTreePath *start, *end; ++ GtkTreeIter iter; ++ gboolean visible; ++ ++ if (priv->browse_files_tree_view == NULL || ++ g_file_info_has_attribute (info, "filechooser::queried")) ++ return FALSE; ++ ++ tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ if (tree_model != GTK_TREE_MODEL (model)) ++ return FALSE; ++ ++ if (!_gtk_file_system_model_get_iter_for_file (model, &iter, file)) ++ g_assert_not_reached (); ++ ++ if (gtk_tree_view_get_visible_range (GTK_TREE_VIEW (priv->browse_files_tree_view), &start, &end)) ++ { ++ GtkTreePath *path; ++ ++ gtk_tree_path_prev (start); ++ gtk_tree_path_next (end); ++ path = gtk_tree_model_get_path (tree_model, &iter); ++ visible = gtk_tree_path_compare (start, path) != 1 && ++ gtk_tree_path_compare (path, end) != 1; ++ gtk_tree_path_free (path); ++ gtk_tree_path_free (start); ++ gtk_tree_path_free (end); ++ } ++ else ++ visible = TRUE; ++ if (visible) ++ { ++ g_file_info_set_attribute_boolean (info, "filechooser::queried", TRUE); ++ g_file_query_info_async (file, ++ G_FILE_ATTRIBUTE_THUMBNAIL_PATH "," ++ G_FILE_ATTRIBUTE_THUMBNAILING_FAILED "," ++ G_FILE_ATTRIBUTE_STANDARD_ICON, ++ G_FILE_QUERY_INFO_NONE, ++ G_PRIORITY_DEFAULT, ++ _gtk_file_system_model_get_cancellable (model), ++ file_system_model_got_thumbnail, ++ model); ++ } ++ return FALSE; ++ } ++ } ++ else ++ g_value_set_boxed (value, NULL); ++ break; ++ case MODEL_COL_SIZE: ++ g_value_set_int64 (value, info ? g_file_info_get_size (info) : 0); ++ break; ++ case MODEL_COL_SIZE_TEXT: ++ if (info == NULL || _gtk_file_info_consider_as_directory (info)) ++ g_value_set_string (value, NULL); ++ else ++ g_value_take_string (value, g_format_size (g_file_info_get_size (info))); ++ break; ++ case MODEL_COL_TYPE: ++ if (info == NULL || _gtk_file_info_consider_as_directory (info)) ++ g_value_set_string (value, NULL); ++ else ++ g_value_take_string (value, get_type_information (impl, info)); ++ break; ++ case MODEL_COL_TIME: ++ case MODEL_COL_DATE_TEXT: ++ case MODEL_COL_TIME_TEXT: ++ { ++ glong time; ++ if (info == NULL) ++ break; ++ if (priv->operation_mode == OPERATION_MODE_RECENT) ++ time = (glong) g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS); ++ else ++ time = (glong) g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED); ++ if (column == MODEL_COL_TIME) ++ g_value_set_long (value, time); ++ else if (time == 0) ++ g_value_set_static_string (value, _("Unknown")); ++ else if (column == MODEL_COL_DATE_TEXT) ++ g_value_take_string (value, my_g_format_date_for_display (impl, time)); ++ else ++ g_value_take_string (value, my_g_format_time_for_display (impl, time)); ++ break; ++ } ++ case MODEL_COL_ELLIPSIZE: ++ g_value_set_enum (value, info ? PANGO_ELLIPSIZE_END : PANGO_ELLIPSIZE_NONE); ++ break; ++ case MODEL_COL_LOCATION_TEXT: ++ { ++ GFile *home_location; ++ GFile *dir_location; ++ gchar *location; ++ ++ home_location = g_file_new_for_path (g_get_home_dir ()); ++ if (file) ++ dir_location = g_file_get_parent (file); ++ else ++ dir_location = NULL; ++ ++ if (dir_location && file_is_recent_uri (dir_location)) ++ { ++ const char *target_uri; ++ GFile *target; ++ ++ target_uri = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI); ++ target = g_file_new_for_uri (target_uri); ++ g_object_unref (dir_location); ++ dir_location = g_file_get_parent (target); ++ g_object_unref (target); ++ } ++ ++ if (!dir_location) ++ location = g_strdup ("/"); ++ else if (priv->current_folder && g_file_equal (priv->current_folder, dir_location)) ++ location = g_strdup (""); ++ else if (g_file_equal (home_location, dir_location)) ++ location = g_strdup (_("Home")); ++ else if (g_file_has_prefix (dir_location, home_location)) ++ { ++ gchar *relative_path; ++ ++ relative_path = g_file_get_relative_path (home_location, dir_location); ++ location = g_filename_display_name (relative_path); ++ ++ g_free (relative_path); ++ } ++ else ++ location = g_file_get_path (dir_location); ++ ++ g_value_take_string (value, location); ++ ++ if (dir_location) ++ g_object_unref (dir_location); ++ g_object_unref (home_location); ++ } ++ break; ++ default: ++ g_assert_not_reached (); ++ break; ++ } ++ ++ return TRUE; ++} ++ ++/* Gets rid of the old list model and creates a new one for the current folder */ ++static gboolean ++set_list_model (GtkFileChooserWidget *impl, ++ GError **error) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_assert (priv->current_folder != NULL); ++ ++ if (priv->browse_files_model && ++ _gtk_file_system_model_get_directory (priv->browse_files_model) == priv->current_folder) ++ return TRUE; ++ ++ profile_start ("start", NULL); ++ ++ stop_loading_and_clear_list_model (impl, TRUE); ++ ++ set_busy_cursor (impl, TRUE); ++ ++ priv->browse_files_model = ++ _gtk_file_system_model_new_for_directory (priv->current_folder, ++ MODEL_ATTRIBUTES, ++ file_system_model_set, ++ impl, ++ MODEL_COLUMN_TYPES); ++ ++ _gtk_file_system_model_set_show_hidden (priv->browse_files_model, priv->show_hidden); ++ ++ profile_msg (" set sort function", NULL); ++ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_NAME, name_sort_func, impl, NULL); ++ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_SIZE, size_sort_func, impl, NULL); ++ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_TYPE, type_sort_func, impl, NULL); ++ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_TIME, time_sort_func, impl, NULL); ++ gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), NULL, NULL, NULL); ++ set_sort_column (impl); ++ priv->list_sort_ascending = TRUE; ++ g_signal_connect (priv->browse_files_model, "sort-column-changed", ++ G_CALLBACK (list_sort_column_changed_cb), impl); ++ ++ load_setup_timer (impl); /* This changes the state to LOAD_PRELOAD */ ++ ++ g_signal_connect (priv->browse_files_model, "finished-loading", ++ G_CALLBACK (browse_files_model_finished_loading_cb), impl); ++ ++ g_signal_connect (priv->browse_files_model, "row-changed", ++ G_CALLBACK (browse_files_model_row_changed_cb), impl); ++ ++ _gtk_file_system_model_set_filter (priv->browse_files_model, priv->current_filter); ++ ++ profile_end ("end", NULL); ++ ++ return TRUE; ++} ++ ++struct update_chooser_entry_selected_foreach_closure { ++ int num_selected; ++ GtkTreeIter first_selected_iter; ++}; ++ ++static gint ++compare_utf8_filenames (const gchar *a, ++ const gchar *b) ++{ ++ gchar *a_folded, *b_folded; ++ gint retval; ++ ++ a_folded = g_utf8_strdown (a, -1); ++ b_folded = g_utf8_strdown (b, -1); ++ ++ retval = strcmp (a_folded, b_folded); ++ ++ g_free (a_folded); ++ g_free (b_folded); ++ ++ return retval; ++} ++ ++static void ++update_chooser_entry_selected_foreach (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ struct update_chooser_entry_selected_foreach_closure *closure; ++ ++ closure = data; ++ closure->num_selected++; ++ ++ if (closure->num_selected == 1) ++ closure->first_selected_iter = *iter; ++} ++ ++static void ++update_chooser_entry (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ struct update_chooser_entry_selected_foreach_closure closure; ++ ++ /* no need to update the file chooser's entry if there's no entry */ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH || ++ !priv->location_entry) ++ return; ++ ++ if (!(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ++ || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER ++ || ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ++ || priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ && priv->location_mode == LOCATION_MODE_FILENAME_ENTRY))) ++ return; ++ ++ g_assert (priv->location_entry != NULL); ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ closure.num_selected = 0; ++ gtk_tree_selection_selected_foreach (selection, update_chooser_entry_selected_foreach, &closure); ++ ++ if (closure.num_selected == 0) ++ { ++ if (priv->operation_mode == OPERATION_MODE_RECENT) ++ _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), NULL); ++ else ++ goto maybe_clear_entry; ++ } ++ else if (closure.num_selected == 1) ++ { ++ if (priv->operation_mode == OPERATION_MODE_BROWSE) ++ { ++ GFileInfo *info; ++ gboolean change_entry; ++ ++ info = _gtk_file_system_model_get_info (priv->browse_files_model, &closure.first_selected_iter); ++ ++ /* If the cursor moved to the row of the newly created folder, ++ * retrieving info will return NULL. ++ */ ++ if (!info) ++ return; ++ ++ g_free (priv->browse_files_last_selected_name); ++ priv->browse_files_last_selected_name = ++ g_strdup (g_file_info_get_display_name (info)); ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ /* Don't change the name when clicking on a folder... */ ++ change_entry = !_gtk_file_info_consider_as_directory (info); ++ } ++ else ++ change_entry = TRUE; /* ... unless we are in SELECT_FOLDER mode */ ++ ++ if (change_entry && !priv->auto_selecting_first_row) ++ { ++ g_signal_handlers_block_by_func (priv->location_entry, G_CALLBACK (location_entry_changed_cb), impl); ++ gtk_entry_set_text (GTK_ENTRY (priv->location_entry), priv->browse_files_last_selected_name); ++ g_signal_handlers_unblock_by_func (priv->location_entry, G_CALLBACK (location_entry_changed_cb), impl); ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ _gtk_file_chooser_entry_select_filename (GTK_FILE_CHOOSER_ENTRY (priv->location_entry)); ++ } ++ ++ return; ++ } ++ else if (priv->operation_mode == OPERATION_MODE_RECENT ++ && priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ { ++ GFile *folder; ++ ++ /* Set the base folder on the name entry, so it will do completion relative to the correct recent-folder */ ++ ++ gtk_tree_model_get (GTK_TREE_MODEL (priv->recent_model), &closure.first_selected_iter, ++ MODEL_COL_FILE, &folder, ++ -1); ++ _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), folder); ++ g_object_unref (folder); ++ return; ++ } ++ } ++ else ++ { ++ g_assert (!(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)); ++ ++ /* Multiple selection, so just clear the entry. */ ++ g_free (priv->browse_files_last_selected_name); ++ priv->browse_files_last_selected_name = NULL; ++ ++ g_signal_handlers_block_by_func (priv->location_entry, G_CALLBACK (location_entry_changed_cb), impl); ++ gtk_entry_set_text (GTK_ENTRY (priv->location_entry), ""); ++ g_signal_handlers_unblock_by_func (priv->location_entry, G_CALLBACK (location_entry_changed_cb), impl); ++ return; ++ } ++ ++ maybe_clear_entry: ++ ++ if ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ && priv->browse_files_last_selected_name) ++ { ++ const char *entry_text; ++ int len; ++ gboolean clear_entry; ++ ++ entry_text = gtk_entry_get_text (GTK_ENTRY (priv->location_entry)); ++ len = strlen (entry_text); ++ if (len != 0) ++ { ++ /* The file chooser entry may have appended a "/" to its text. ++ * So take it out, and compare the result to the old selection. ++ */ ++ if (entry_text[len - 1] == G_DIR_SEPARATOR) ++ { ++ gchar *tmp; ++ ++ tmp = g_strndup (entry_text, len - 1); ++ clear_entry = (compare_utf8_filenames (priv->browse_files_last_selected_name, tmp) == 0); ++ g_free (tmp); ++ } ++ else ++ clear_entry = (compare_utf8_filenames (priv->browse_files_last_selected_name, entry_text) == 0); ++ } ++ else ++ clear_entry = FALSE; ++ ++ if (clear_entry) ++ { ++ g_signal_handlers_block_by_func (priv->location_entry, G_CALLBACK (location_entry_changed_cb), impl); ++ gtk_entry_set_text (GTK_ENTRY (priv->location_entry), ""); ++ g_signal_handlers_unblock_by_func (priv->location_entry, G_CALLBACK (location_entry_changed_cb), impl); ++ } ++ } ++} ++ ++static gboolean ++gtk_file_chooser_widget_set_current_folder (GtkFileChooser *chooser, ++ GFile *file, ++ GError **error) ++{ ++ return gtk_file_chooser_widget_update_current_folder (chooser, file, FALSE, FALSE, error); ++} ++ ++ ++struct UpdateCurrentFolderData ++{ ++ GtkFileChooserWidget *impl; ++ GFile *file; ++ gboolean keep_trail; ++ gboolean clear_entry; ++ GFile *original_file; ++ GError *original_error; ++}; ++ ++static void ++update_current_folder_mount_enclosing_volume_cb (GCancellable *cancellable, ++ GtkFileSystemVolume *volume, ++ const GError *error, ++ gpointer user_data) ++{ ++ struct UpdateCurrentFolderData *data = user_data; ++ GtkFileChooserWidget *impl = data->impl; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean cancelled = g_cancellable_is_cancelled (cancellable); ++ ++ if (cancellable != priv->update_current_folder_cancellable) ++ goto out; ++ ++ priv->update_current_folder_cancellable = NULL; ++ set_busy_cursor (impl, FALSE); ++ ++ if (cancelled) ++ goto out; ++ ++ if (error) ++ { ++ error_changing_folder_dialog (data->impl, data->file, g_error_copy (error)); ++ priv->reload_state = RELOAD_EMPTY; ++ goto out; ++ } ++ ++ change_folder_and_display_error (impl, data->file, data->clear_entry); ++ ++out: ++ g_object_unref (data->impl); ++ g_object_unref (data->file); ++ g_free (data); ++ ++ g_object_unref (cancellable); ++} ++ ++static void ++update_current_folder_get_info_cb (GCancellable *cancellable, ++ GFileInfo *info, ++ const GError *error, ++ gpointer user_data) ++{ ++ gboolean cancelled = g_cancellable_is_cancelled (cancellable); ++ struct UpdateCurrentFolderData *data = user_data; ++ GtkFileChooserWidget *impl = data->impl; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (cancellable != priv->update_current_folder_cancellable) ++ goto out; ++ ++ priv->update_current_folder_cancellable = NULL; ++ priv->reload_state = RELOAD_EMPTY; ++ ++ set_busy_cursor (impl, FALSE); ++ ++ if (cancelled) ++ goto out; ++ ++ if (error) ++ { ++ GFile *parent_file; ++ ++ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) ++ { ++ GMountOperation *mount_operation; ++ GtkWidget *toplevel; ++ ++ g_object_unref (cancellable); ++ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (impl)); ++ ++ mount_operation = gtk_mount_operation_new (GTK_WINDOW (toplevel)); ++ ++ set_busy_cursor (impl, TRUE); ++ ++ priv->update_current_folder_cancellable = ++ _gtk_file_system_mount_enclosing_volume (priv->file_system, data->file, ++ mount_operation, ++ update_current_folder_mount_enclosing_volume_cb, ++ data); ++ ++ return; ++ } ++ ++ if (!data->original_file) ++ { ++ data->original_file = g_object_ref (data->file); ++ data->original_error = g_error_copy (error); ++ } ++ ++ parent_file = g_file_get_parent (data->file); ++ ++ /* get parent path and try to change the folder to that */ ++ if (parent_file) ++ { ++ g_object_unref (data->file); ++ data->file = parent_file; ++ ++ g_object_unref (cancellable); ++ ++ /* restart the update current folder operation */ ++ priv->reload_state = RELOAD_HAS_FOLDER; ++ ++ priv->update_current_folder_cancellable = ++ _gtk_file_system_get_info (priv->file_system, data->file, ++ "standard::type", ++ update_current_folder_get_info_cb, ++ data); ++ ++ set_busy_cursor (impl, TRUE); ++ ++ return; ++ } ++ else ++ { ++ /* Error and bail out, ignoring "not found" errors since they're useless: ++ * they only happen when a program defaults to a folder that has been (re)moved. ++ */ ++ if (!g_error_matches (data->original_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) ++ error_changing_folder_dialog (impl, data->original_file, data->original_error); ++ else ++ g_error_free (data->original_error); ++ ++ g_object_unref (data->original_file); ++ ++ goto out; ++ } ++ } ++ ++ if (data->original_file) ++ { ++ /* Error and bail out, ignoring "not found" errors since they're useless: ++ * they only happen when a program defaults to a folder that has been (re)moved. ++ */ ++ if (!g_error_matches (data->original_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) ++ error_changing_folder_dialog (impl, data->original_file, data->original_error); ++ else ++ g_error_free (data->original_error); ++ ++ g_object_unref (data->original_file); ++ } ++ ++ if (! _gtk_file_info_consider_as_directory (info)) ++ goto out; ++ ++ _gtk_path_bar_set_file (GTK_PATH_BAR (priv->browse_path_bar), data->file, data->keep_trail); ++ ++ if (priv->current_folder != data->file) ++ { ++ if (priv->current_folder) ++ g_object_unref (priv->current_folder); ++ ++ priv->current_folder = g_object_ref (data->file); ++ } ++ ++ priv->reload_state = RELOAD_HAS_FOLDER; ++ ++ /* Set the folder on the save entry */ ++ ++ if (priv->location_entry) ++ { ++ _gtk_file_chooser_entry_set_base_folder (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), ++ priv->current_folder); ++ ++ if (data->clear_entry) ++ gtk_entry_set_text (GTK_ENTRY (priv->location_entry), ""); ++ } ++ ++ /* Create a new list model. This is slightly evil; we store the result value ++ * but perform more actions rather than returning immediately even if it ++ * generates an error. ++ */ ++ set_list_model (impl, NULL); ++ ++ /* Refresh controls */ ++ ++ gtk_places_sidebar_set_location (GTK_PLACES_SIDEBAR (priv->places_sidebar), priv->current_folder); ++ ++ g_object_notify (G_OBJECT (impl), "subtitle"); ++ ++ g_signal_emit_by_name (impl, "current-folder-changed", 0); ++ ++ check_preview_change (impl); ++ ++ g_signal_emit_by_name (impl, "selection-changed", 0); ++ ++out: ++ g_object_unref (data->impl); ++ g_object_unref (data->file); ++ g_free (data); ++ ++ g_object_unref (cancellable); ++} ++ ++static gboolean ++gtk_file_chooser_widget_update_current_folder (GtkFileChooser *chooser, ++ GFile *file, ++ gboolean keep_trail, ++ gboolean clear_entry, ++ GError **error) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ struct UpdateCurrentFolderData *data; ++ ++ profile_start ("start", NULL); ++ ++ g_object_ref (file); ++ ++ operation_mode_set (impl, OPERATION_MODE_BROWSE); ++ ++ if (priv->local_only && !_gtk_file_has_native_path (file)) ++ { ++ g_set_error_literal (error, ++ GTK_FILE_CHOOSER_ERROR, ++ GTK_FILE_CHOOSER_ERROR_BAD_FILENAME, ++ _("Cannot change to folder because it is not local")); ++ ++ g_object_unref (file); ++ profile_end ("end - not local", NULL); ++ return FALSE; ++ } ++ ++ if (priv->update_current_folder_cancellable) ++ g_cancellable_cancel (priv->update_current_folder_cancellable); ++ ++ /* Test validity of path here. */ ++ data = g_new0 (struct UpdateCurrentFolderData, 1); ++ data->impl = g_object_ref (impl); ++ data->file = g_object_ref (file); ++ data->keep_trail = keep_trail; ++ data->clear_entry = clear_entry; ++ ++ priv->reload_state = RELOAD_HAS_FOLDER; ++ ++ priv->update_current_folder_cancellable = ++ _gtk_file_system_get_info (priv->file_system, file, ++ "standard::type", ++ update_current_folder_get_info_cb, ++ data); ++ ++ set_busy_cursor (impl, TRUE); ++ g_object_unref (file); ++ ++ profile_end ("end", NULL); ++ return TRUE; ++} ++ ++static GFile * ++gtk_file_chooser_widget_get_current_folder (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->operation_mode == OPERATION_MODE_RECENT) ++ return NULL; ++ ++ if (priv->current_folder) ++ return g_object_ref (priv->current_folder); ++ ++ return NULL; ++} ++ ++static void ++gtk_file_chooser_widget_set_current_name (GtkFileChooser *chooser, ++ const gchar *name) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_return_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); ++ ++ pending_select_files_free (impl); ++ gtk_entry_set_text (GTK_ENTRY (priv->location_entry), name); ++} ++ ++static gchar * ++gtk_file_chooser_widget_get_current_name (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_return_val_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, ++ NULL); ++ ++ return g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->location_entry))); ++} ++ ++static gboolean ++gtk_file_chooser_widget_select_file (GtkFileChooser *chooser, ++ GFile *file, ++ GError **error) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *parent_file; ++ gboolean same_path; ++ GtkFileSystemModel *fsmodel; ++ ++ parent_file = g_file_get_parent (file); ++ ++ if (!parent_file) ++ return gtk_file_chooser_set_current_folder_file (chooser, file, error); ++ ++ fsmodel = GTK_FILE_SYSTEM_MODEL (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view))); ++ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH || ++ priv->operation_mode == OPERATION_MODE_RECENT || ++ priv->load_state == LOAD_EMPTY || ++ priv->browse_files_model != fsmodel) ++ { ++ same_path = FALSE; ++ } ++ else ++ { ++ g_assert (priv->current_folder != NULL); ++ ++ same_path = g_file_equal (parent_file, priv->current_folder); ++ } ++ ++ if (same_path && priv->load_state == LOAD_FINISHED) ++ { ++ gboolean result; ++ GSList files; ++ ++ files.data = (gpointer) file; ++ files.next = NULL; ++ ++ /* Prevent the file chooser from loading a different folder when it is mapped */ ++ priv->reload_state = RELOAD_HAS_FOLDER; ++ ++ result = show_and_select_files (impl, &files); ++ g_object_unref (parent_file); ++ return result; ++ } ++ ++ pending_select_files_add (impl, file); ++ ++ if (!same_path) ++ { ++ gboolean result; ++ ++ result = gtk_file_chooser_set_current_folder_file (chooser, parent_file, error); ++ g_object_unref (parent_file); ++ return result; ++ } ++ ++ g_object_unref (parent_file); ++ return TRUE; ++} ++ ++static void ++gtk_file_chooser_widget_unselect_file (GtkFileChooser *chooser, ++ GFile *file) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeView *tree_view; ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ ++ tree_view = GTK_TREE_VIEW (priv->browse_files_tree_view); ++ model = gtk_tree_view_get_model (tree_view); ++ if (!model) ++ return; ++ ++ if (!_gtk_file_system_model_get_iter_for_file (GTK_FILE_SYSTEM_MODEL (model), &iter, file)) ++ return; ++ ++ gtk_tree_selection_unselect_iter (gtk_tree_view_get_selection (tree_view), &iter); ++} ++ ++static gboolean ++maybe_select (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ gboolean is_sensitive; ++ gboolean is_folder; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ ++ gtk_tree_model_get (model, iter, ++ MODEL_COL_IS_FOLDER, &is_folder, ++ MODEL_COL_IS_SENSITIVE, &is_sensitive, ++ -1); ++ ++ if (is_sensitive && ++ ((is_folder && priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) || ++ (!is_folder && priv->action == GTK_FILE_CHOOSER_ACTION_OPEN))) ++ gtk_tree_selection_select_iter (selection, iter); ++ else ++ gtk_tree_selection_unselect_iter (selection, iter); ++ ++ return FALSE; ++} ++ ++static void ++gtk_file_chooser_widget_select_all (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH || ++ priv->operation_mode == OPERATION_MODE_RECENT) ++ { ++ GtkTreeSelection *selection; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_select_all (selection); ++ return; ++ } ++ ++ if (priv->select_multiple) ++ gtk_tree_model_foreach (GTK_TREE_MODEL (priv->browse_files_model), ++ maybe_select, impl); ++} ++ ++static void ++gtk_file_chooser_widget_unselect_all (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ ++ gtk_tree_selection_unselect_all (selection); ++ pending_select_files_free (impl); ++} ++ ++/* Checks whether the filename entry for Save modes contains a well-formed filename. ++ * ++ * is_well_formed_ret - whether what the user typed passes gkt_file_system_make_path() ++ * ++ * is_empty_ret - whether the file entry is totally empty ++ * ++ * is_file_part_empty_ret - whether the file part is empty (will be if user types ++ * "foobar/", and the path will be “$cwd/foobar”) ++ */ ++static void ++check_save_entry (GtkFileChooserWidget *impl, ++ GFile **file_ret, ++ gboolean *is_well_formed_ret, ++ gboolean *is_empty_ret, ++ gboolean *is_file_part_empty_ret, ++ gboolean *is_folder) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkFileChooserEntry *chooser_entry; ++ GFile *current_folder; ++ const char *file_part; ++ char *file_part_stripped; ++ GFile *file; ++ GError *error; ++ ++ g_assert (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER || ++ ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) && ++ priv->location_mode == LOCATION_MODE_FILENAME_ENTRY)); ++ ++ chooser_entry = GTK_FILE_CHOOSER_ENTRY (priv->location_entry); ++ ++ if (strlen (gtk_entry_get_text (GTK_ENTRY (chooser_entry))) == 0) ++ { ++ *file_ret = NULL; ++ *is_well_formed_ret = TRUE; ++ *is_empty_ret = TRUE; ++ *is_file_part_empty_ret = TRUE; ++ *is_folder = FALSE; ++ ++ return; ++ } ++ ++ *is_empty_ret = FALSE; ++ ++ current_folder = _gtk_file_chooser_entry_get_current_folder (chooser_entry); ++ if (!current_folder) ++ { ++ *file_ret = NULL; ++ *is_well_formed_ret = FALSE; ++ *is_file_part_empty_ret = FALSE; ++ *is_folder = FALSE; ++ ++ return; ++ } ++ ++ file_part = _gtk_file_chooser_entry_get_file_part (chooser_entry); ++ ++ /* Copy and strip leading and trailing whitespace */ ++ file_part_stripped = g_strstrip (g_strdup (file_part)); ++ ++ if (!file_part_stripped || file_part_stripped[0] == '\0') ++ { ++ *file_ret = current_folder; ++ *is_well_formed_ret = TRUE; ++ *is_file_part_empty_ret = TRUE; ++ *is_folder = TRUE; ++ ++ g_free (file_part_stripped); ++ return; ++ } ++ ++ *is_file_part_empty_ret = FALSE; ++ ++ error = NULL; ++ file = g_file_get_child_for_display_name (current_folder, file_part_stripped, &error); ++ g_object_unref (current_folder); ++ g_free (file_part_stripped); ++ ++ if (!file) ++ { ++ error_building_filename_dialog (impl, error); ++ *file_ret = NULL; ++ *is_well_formed_ret = FALSE; ++ *is_folder = FALSE; ++ ++ return; ++ } ++ ++ *file_ret = file; ++ *is_well_formed_ret = TRUE; ++ *is_folder = _gtk_file_chooser_entry_get_is_folder (chooser_entry, file); ++} ++ ++struct get_files_closure { ++ GtkFileChooserWidget *impl; ++ GSList *result; ++ GFile *file_from_entry; ++}; ++ ++static void ++get_files_foreach (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GtkFileSystemModel *fs_model = GTK_FILE_SYSTEM_MODEL (model); ++ struct get_files_closure *info = data; ++ GFile *file; ++ ++ file = _gtk_file_system_model_get_file (fs_model, iter); ++ ++ if (!info->file_from_entry || !g_file_equal (info->file_from_entry, file)) ++ info->result = g_slist_prepend (info->result, g_object_ref (file)); ++} ++ ++static GSList * ++gtk_file_chooser_widget_get_files (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ struct get_files_closure info; ++ GtkWindow *toplevel; ++ GtkWidget *current_focus; ++ gboolean file_list_seen; ++ ++ info.impl = impl; ++ info.result = NULL; ++ info.file_from_entry = NULL; ++ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH) ++ return get_selected_files (impl); ++ ++ if (priv->operation_mode == OPERATION_MODE_RECENT) ++ { ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ { ++ file_list_seen = TRUE; ++ goto file_entry; ++ } ++ else ++ return get_selected_files (impl); ++ } ++ ++ toplevel = get_toplevel (GTK_WIDGET (impl)); ++ if (toplevel) ++ current_focus = gtk_window_get_focus (toplevel); ++ else ++ current_focus = NULL; ++ ++ file_list_seen = FALSE; ++ if (current_focus == priv->browse_files_tree_view) ++ { ++ GtkTreeSelection *selection; ++ ++ file_list: ++ ++ file_list_seen = TRUE; ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, get_files_foreach, &info); ++ ++ /* If there is no selection in the file list, we probably have this situation: ++ * ++ * 1. The user typed a filename in the SAVE filename entry ("foo.txt"). ++ * 2. He then double-clicked on a folder ("bar") in the file list ++ * ++ * So we want the selection to be "bar/foo.txt". Jump to the case for the ++ * filename entry to see if that is the case. ++ */ ++ if (info.result == NULL && priv->location_entry) ++ goto file_entry; ++ } ++ else if (priv->location_entry && current_focus == priv->location_entry) ++ { ++ gboolean is_well_formed, is_empty, is_file_part_empty, is_folder; ++ ++ file_entry: ++ ++ check_save_entry (impl, &info.file_from_entry, &is_well_formed, &is_empty, &is_file_part_empty, &is_folder); ++ ++ if (is_empty) ++ goto out; ++ ++ if (!is_well_formed) ++ return NULL; ++ ++ if (info.file_from_entry) ++ info.result = g_slist_prepend (info.result, info.file_from_entry); ++ else if (!file_list_seen) ++ goto file_list; ++ else ++ return NULL; ++ } ++ else if (priv->toplevel_last_focus_widget == priv->browse_files_tree_view) ++ goto file_list; ++ else if (priv->location_entry && priv->toplevel_last_focus_widget == priv->location_entry) ++ goto file_entry; ++ else ++ { ++ /* The focus is on a dialog's action area button or something else */ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ goto file_entry; ++ else ++ goto file_list; ++ } ++ ++ out: ++ ++ /* If there's no folder selected, and we're in SELECT_FOLDER mode, ++ * then we fall back to the current directory ++ */ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER && ++ info.result == NULL) ++ { ++ GFile *current_folder; ++ ++ current_folder = gtk_file_chooser_get_current_folder_file (chooser); ++ ++ if (current_folder) ++ info.result = g_slist_prepend (info.result, current_folder); ++ } ++ ++ return g_slist_reverse (info.result); ++} ++ ++GFile * ++gtk_file_chooser_widget_get_preview_file (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->preview_file) ++ return g_object_ref (priv->preview_file); ++ else ++ return NULL; ++} ++ ++static GtkFileSystem * ++gtk_file_chooser_widget_get_file_system (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ return priv->file_system; ++} ++ ++/* Shows or hides the filter widgets */ ++static void ++show_filters (GtkFileChooserWidget *impl, ++ gboolean show) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_widget_set_visible (priv->filter_combo_hbox, show); ++ update_extra_and_filters (impl); ++} ++ ++static void ++gtk_file_chooser_widget_add_filter (GtkFileChooser *chooser, ++ GtkFileFilter *filter) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ const gchar *name; ++ ++ if (g_slist_find (priv->filters, filter)) ++ { ++ g_warning ("gtk_file_chooser_add_filter() called on filter already in list"); ++ return; ++ } ++ ++ g_object_ref_sink (filter); ++ priv->filters = g_slist_append (priv->filters, filter); ++ ++ name = gtk_file_filter_get_name (filter); ++ if (!name) ++ name = "Untitled filter"; /* Place-holder, doesn't need to be marked for translation */ ++ ++ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (priv->filter_combo), name); ++ ++ if (!g_slist_find (priv->filters, priv->current_filter)) ++ set_current_filter (impl, filter); ++ ++ show_filters (impl, TRUE); ++} ++ ++static void ++gtk_file_chooser_widget_remove_filter (GtkFileChooser *chooser, ++ GtkFileFilter *filter) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ gint filter_index; ++ ++ filter_index = g_slist_index (priv->filters, filter); ++ ++ if (filter_index < 0) ++ { ++ g_warning ("gtk_file_chooser_remove_filter() called on filter not in list"); ++ return; ++ } ++ ++ priv->filters = g_slist_remove (priv->filters, filter); ++ ++ if (filter == priv->current_filter) ++ { ++ if (priv->filters) ++ set_current_filter (impl, priv->filters->data); ++ else ++ set_current_filter (impl, NULL); ++ } ++ ++ /* Remove row from the combo box */ ++ model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->filter_combo)); ++ if (!gtk_tree_model_iter_nth_child (model, &iter, NULL, filter_index)) ++ g_assert_not_reached (); ++ ++ gtk_list_store_remove (GTK_LIST_STORE (model), &iter); ++ ++ g_object_unref (filter); ++ ++ if (!priv->filters) ++ show_filters (impl, FALSE); ++} ++ ++static GSList * ++gtk_file_chooser_widget_list_filters (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ return g_slist_copy (priv->filters); ++} ++ ++static gboolean ++gtk_file_chooser_widget_add_shortcut_folder (GtkFileChooser *chooser, ++ GFile *file, ++ GError **error) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_places_sidebar_add_shortcut (GTK_PLACES_SIDEBAR (priv->places_sidebar), file); ++ return TRUE; ++} ++ ++static gboolean ++gtk_file_chooser_widget_remove_shortcut_folder (GtkFileChooser *chooser, ++ GFile *file, ++ GError **error) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_places_sidebar_remove_shortcut (GTK_PLACES_SIDEBAR (priv->places_sidebar), file); ++ return TRUE; ++} ++ ++static GSList * ++gtk_file_chooser_widget_list_shortcut_folders (GtkFileChooser *chooser) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ return gtk_places_sidebar_list_shortcuts (GTK_PLACES_SIDEBAR (priv->places_sidebar)); ++} ++ ++/* Guesses a size based upon font sizes */ ++static void ++find_good_size_from_style (GtkWidget *widget, ++ gint *width, ++ gint *height) ++{ ++ GtkStyleContext *context; ++ double font_size; ++ GdkScreen *screen; ++ double resolution; ++ ++ context = gtk_widget_get_style_context (widget); ++ ++ screen = gtk_widget_get_screen (widget); ++ if (screen) ++ { ++ resolution = gdk_screen_get_resolution (screen); ++ if (resolution < 0.0) /* will be -1 if the resolution is not defined in the GdkScreen */ ++ resolution = 96.0; ++ } ++ else ++ resolution = 96.0; /* wheeee */ ++ ++ gtk_style_context_get (context, ++ gtk_style_context_get_state (context), ++ "font-size", &font_size, ++ NULL); ++ font_size = font_size * resolution / 72.0 + 0.5; ++ ++ *width = font_size * NUM_CHARS; ++ *height = font_size * NUM_LINES; ++} ++ ++static void ++gtk_file_chooser_widget_get_default_size (GtkFileChooserEmbed *chooser_embed, ++ gint *default_width, ++ gint *default_height) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser_embed); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkRequisition req; ++ int x, y, width, height; ++ GSettings *settings; ++ ++ settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl)); ++ ++ g_settings_get (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &x, &y); ++ g_settings_get (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &width, &height); ++ ++ if (x >= 0 && y >= 0 && width > 0 && height > 0) ++ { ++ *default_width = width; ++ *default_height = height; ++ return; ++ } ++ ++ find_good_size_from_style (GTK_WIDGET (chooser_embed), default_width, default_height); ++ ++ if (priv->preview_widget_active && ++ priv->preview_widget && ++ gtk_widget_get_visible (priv->preview_widget)) ++ { ++ gtk_widget_get_preferred_size (priv->preview_box, ++ &req, NULL); ++ *default_width += PREVIEW_HBOX_SPACING + req.width; ++ } ++ ++ if (priv->extra_widget && ++ gtk_widget_get_visible (priv->extra_widget)) ++ { ++ gtk_widget_get_preferred_size (priv->extra_align, ++ &req, NULL); ++ *default_height += gtk_box_get_spacing (GTK_BOX (chooser_embed)) + req.height; ++ } ++} ++ ++struct switch_folder_closure { ++ GtkFileChooserWidget *impl; ++ GFile *file; ++ int num_selected; ++}; ++ ++/* Used from gtk_tree_selection_selected_foreach() in switch_to_selected_folder() */ ++static void ++switch_folder_foreach_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ struct switch_folder_closure *closure; ++ ++ closure = data; ++ ++ closure->file = _gtk_file_system_model_get_file (GTK_FILE_SYSTEM_MODEL (model), iter); ++ closure->num_selected++; ++} ++ ++/* Changes to the selected folder in the list view */ ++static void ++switch_to_selected_folder (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ struct switch_folder_closure closure; ++ ++ /* We do this with foreach() rather than get_selected() as we may be in ++ * multiple selection mode ++ */ ++ ++ closure.impl = impl; ++ closure.file = NULL; ++ closure.num_selected = 0; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, switch_folder_foreach_cb, &closure); ++ ++ g_assert (closure.file && closure.num_selected == 1); ++ ++ change_folder_and_display_error (impl, closure.file, FALSE); ++} ++ ++/* Gets the GFileInfo for the selected row in the file list; assumes single ++ * selection mode. ++ */ ++static GFileInfo * ++get_selected_file_info_from_file_list (GtkFileChooserWidget *impl, ++ gboolean *had_selection) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ GtkTreeIter iter; ++ GFileInfo *info; ++ GtkTreeModel *model; ++ ++ g_assert (!priv->select_multiple); ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) ++ { ++ *had_selection = FALSE; ++ return NULL; ++ } ++ ++ *had_selection = TRUE; ++ ++ info = _gtk_file_system_model_get_info (GTK_FILE_SYSTEM_MODEL (model), &iter); ++ return info; ++} ++ ++/* Gets the display name of the selected file in the file list; assumes single ++ * selection mode and that something is selected. ++ */ ++static const gchar * ++get_display_name_from_file_list (GtkFileChooserWidget *impl) ++{ ++ GFileInfo *info; ++ gboolean had_selection; ++ ++ info = get_selected_file_info_from_file_list (impl, &had_selection); ++ g_assert (had_selection); ++ g_assert (info != NULL); ++ ++ return g_file_info_get_display_name (info); ++} ++ ++static void ++add_custom_button_to_dialog (GtkDialog *dialog, ++ const gchar *mnemonic_label, ++ gint response_id) ++{ ++ GtkWidget *button; ++ ++ button = gtk_button_new_with_mnemonic (mnemonic_label); ++ gtk_widget_set_can_default (button, TRUE); ++ gtk_widget_show (button); ++ ++ gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, response_id); ++} ++ ++/* Presents an overwrite confirmation dialog; returns whether we should accept ++ * the filename. ++ */ ++static gboolean ++confirm_dialog_should_accept_filename (GtkFileChooserWidget *impl, ++ const gchar *file_part, ++ const gchar *folder_display_name) ++{ ++ GtkWindow *toplevel; ++ GtkWidget *dialog; ++ int response; ++ ++ toplevel = get_toplevel (GTK_WIDGET (impl)); ++ ++ dialog = gtk_message_dialog_new (toplevel, ++ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, ++ GTK_MESSAGE_QUESTION, ++ GTK_BUTTONS_NONE, ++ _("A file named “%s” already exists. Do you want to replace it?"), ++ file_part); ++ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), ++ _("The file already exists in “%s”. Replacing it will " ++ "overwrite its contents."), ++ folder_display_name); ++ ++ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); ++ add_custom_button_to_dialog (GTK_DIALOG (dialog), _("_Replace"), GTK_RESPONSE_ACCEPT); ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), ++ GTK_RESPONSE_ACCEPT, ++ GTK_RESPONSE_CANCEL, ++ -1); ++G_GNUC_END_IGNORE_DEPRECATIONS ++ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); ++ ++ if (gtk_window_has_group (toplevel)) ++ gtk_window_group_add_window (gtk_window_get_group (toplevel), GTK_WINDOW (dialog)); ++ ++ response = gtk_dialog_run (GTK_DIALOG (dialog)); ++ ++ if (response == GTK_RESPONSE_ACCEPT) ++ /* Dialog is now going to be closed, so prevent any button/key presses to ++ * file list (will be restablished on next map()). Fixes data loss bug #2288 */ ++ impl->priv->browse_files_interaction_frozen = TRUE; ++ ++ gtk_widget_destroy (dialog); ++ ++ return (response == GTK_RESPONSE_ACCEPT); ++} ++ ++struct GetDisplayNameData ++{ ++ GtkFileChooserWidget *impl; ++ gchar *file_part; ++}; ++ ++/* Every time we request a response explicitly, we need to save the selection to ++ * the recently-used list, as requesting a response means, “the dialog is confirmed”. ++ */ ++static void ++request_response_and_add_to_recent_list (GtkFileChooserWidget *impl) ++{ ++ g_signal_emit_by_name (impl, "response-requested"); ++ add_selection_to_recent_list (impl); ++} ++ ++static void ++confirmation_confirm_get_info_cb (GCancellable *cancellable, ++ GFileInfo *info, ++ const GError *error, ++ gpointer user_data) ++{ ++ gboolean cancelled = g_cancellable_is_cancelled (cancellable); ++ gboolean should_respond = FALSE; ++ struct GetDisplayNameData *data = user_data; ++ GtkFileChooserWidgetPrivate *priv = data->impl->priv; ++ ++ if (cancellable != priv->should_respond_get_info_cancellable) ++ goto out; ++ ++ priv->should_respond_get_info_cancellable = NULL; ++ ++ if (cancelled) ++ goto out; ++ ++ if (error) ++ /* Huh? Did the folder disappear? Let the caller deal with it */ ++ should_respond = TRUE; ++ else ++ should_respond = confirm_dialog_should_accept_filename (data->impl, data->file_part, g_file_info_get_display_name (info)); ++ ++ set_busy_cursor (data->impl, FALSE); ++ if (should_respond) ++ request_response_and_add_to_recent_list (data->impl); ++ ++out: ++ g_object_unref (data->impl); ++ g_free (data->file_part); ++ g_free (data); ++ ++ g_object_unref (cancellable); ++} ++ ++/* Does overwrite confirmation if appropriate, and returns whether the dialog ++ * should respond. Can get the file part from the file list or the save entry. ++ */ ++static gboolean ++should_respond_after_confirm_overwrite (GtkFileChooserWidget *impl, ++ const gchar *file_part, ++ GFile *parent_file) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkFileChooserConfirmation conf; ++ ++ if (!priv->do_overwrite_confirmation) ++ return TRUE; ++ ++ conf = GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM; ++ ++ g_signal_emit_by_name (impl, "confirm-overwrite", &conf); ++ ++ switch (conf) ++ { ++ case GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM: ++ { ++ struct GetDisplayNameData *data; ++ ++ g_assert (file_part != NULL); ++ ++ data = g_new0 (struct GetDisplayNameData, 1); ++ data->impl = g_object_ref (impl); ++ data->file_part = g_strdup (file_part); ++ ++ if (priv->should_respond_get_info_cancellable) ++ g_cancellable_cancel (priv->should_respond_get_info_cancellable); ++ ++ priv->should_respond_get_info_cancellable = ++ _gtk_file_system_get_info (priv->file_system, parent_file, ++ "standard::display-name", ++ confirmation_confirm_get_info_cb, ++ data); ++ set_busy_cursor (data->impl, TRUE); ++ return FALSE; ++ } ++ ++ case GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME: ++ return TRUE; ++ ++ case GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN: ++ return FALSE; ++ ++ default: ++ g_assert_not_reached (); ++ return FALSE; ++ } ++} ++ ++static void ++name_entry_get_parent_info_cb (GCancellable *cancellable, ++ GFileInfo *info, ++ const GError *error, ++ gpointer user_data) ++{ ++ gboolean parent_is_folder = FALSE; ++ gboolean parent_is_accessible = FALSE; ++ gboolean cancelled = g_cancellable_is_cancelled (cancellable); ++ struct FileExistsData *data = user_data; ++ GtkFileChooserWidget *impl = data->impl; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (cancellable != priv->should_respond_get_info_cancellable) ++ goto out; ++ ++ priv->should_respond_get_info_cancellable = NULL; ++ ++ set_busy_cursor (impl, FALSE); ++ ++ if (cancelled) ++ goto out; ++ ++ if (info) ++ { ++ parent_is_folder = _gtk_file_info_consider_as_directory (info); ++ ++ /* Some gvfs backends do not set executable attribute, let's assume that ++ * the folder is accessible even if the attribute is not set. ++ */ ++ parent_is_accessible = !g_file_info_has_attribute (info, "access::can-execute") || ++ g_file_info_get_attribute_boolean (info, "access::can-execute"); ++ } ++ ++ if (parent_is_folder && parent_is_accessible) ++ { ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN) ++ { ++ request_response_and_add_to_recent_list (impl); /* even if the file doesn't exist, apps can make good use of that (e.g. Emacs) */ ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ { ++ if (data->file_exists_and_is_not_folder) ++ { ++ gboolean retval; ++ char *file_part; ++ ++ /* Dup the string because the string may be modified ++ * depending on what clients do in the confirm-overwrite ++ * signal and this corrupts the pointer ++ */ ++ file_part = g_strdup (_gtk_file_chooser_entry_get_file_part (GTK_FILE_CHOOSER_ENTRY (priv->location_entry))); ++ retval = should_respond_after_confirm_overwrite (impl, file_part, data->parent_file); ++ g_free (file_part); ++ ++ if (retval) ++ request_response_and_add_to_recent_list (impl); ++ } ++ else ++ request_response_and_add_to_recent_list (impl); ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ++ || priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ GError *mkdir_error = NULL; ++ ++ /* In both cases (SELECT_FOLDER and CREATE_FOLDER), if you type ++ * "/blah/nonexistent" you *will* want a folder created. ++ */ ++ ++ set_busy_cursor (impl, TRUE); ++ g_file_make_directory (data->file, NULL, &mkdir_error); ++ set_busy_cursor (impl, FALSE); ++ ++ if (!mkdir_error) ++ request_response_and_add_to_recent_list (impl); ++ else ++ error_creating_folder_dialog (impl, data->file, mkdir_error); ++ } ++ else ++ g_assert_not_reached (); ++ } ++ else if (parent_is_folder) ++ { ++ GError *error; ++ ++ error = NULL; ++ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, ++ _("You do not have access to the specified folder.")); ++ ++ error_changing_folder_dialog (impl, data->parent_file, error); ++ } ++ else if (info) ++ { ++ /* The parent exists, but it's not a folder! ++ * Someone probably typed existing_file.txt/subfile.txt ++ */ ++ error_with_file_under_nonfolder (impl, data->parent_file); ++ } ++ else ++ { ++ GError *error_copy; ++ ++ /* The parent folder is not readable for some reason */ ++ ++ error_copy = g_error_copy (error); ++ error_changing_folder_dialog (impl, data->parent_file, error_copy); ++ } ++ ++out: ++ g_object_unref (data->impl); ++ g_object_unref (data->file); ++ g_object_unref (data->parent_file); ++ g_free (data); ++ ++ g_object_unref (cancellable); ++} ++ ++static void ++file_exists_get_info_cb (GCancellable *cancellable, ++ GFileInfo *info, ++ const GError *error, ++ gpointer user_data) ++{ ++ gboolean data_ownership_taken = FALSE; ++ gboolean cancelled = g_cancellable_is_cancelled (cancellable); ++ gboolean file_exists; ++ gboolean is_folder; ++ gboolean needs_parent_check = FALSE; ++ struct FileExistsData *data = user_data; ++ GtkFileChooserWidget *impl = data->impl; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (cancellable != priv->file_exists_get_info_cancellable) ++ goto out; ++ ++ priv->file_exists_get_info_cancellable = NULL; ++ ++ set_busy_cursor (impl, FALSE); ++ ++ if (cancelled) ++ goto out; ++ ++ file_exists = (info != NULL); ++ is_folder = (file_exists && _gtk_file_info_consider_as_directory (info)); ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN) ++ { ++ if (is_folder) ++ change_folder_and_display_error (impl, data->file, TRUE); ++ else ++ { ++ if (file_exists) ++ request_response_and_add_to_recent_list (impl); /* user typed an existing filename; we are done */ ++ else ++ needs_parent_check = TRUE; /* file doesn't exist; see if its parent exists */ ++ } ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ if (file_exists && !is_folder) ++ { ++ /* Oops, the user typed the name of an existing path which is not ++ * a folder ++ */ ++ error_creating_folder_over_existing_file_dialog (impl, data->file); ++ } ++ else ++ { ++ needs_parent_check = TRUE; ++ } ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ { ++ if (!file_exists) ++ { ++ needs_parent_check = TRUE; ++ } ++ else ++ { ++ if (is_folder) ++ { ++ /* User typed a folder; we are done */ ++ request_response_and_add_to_recent_list (impl); ++ } ++ else ++ error_selecting_folder_over_existing_file_dialog (impl); ++ } ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ { ++ if (is_folder) ++ change_folder_and_display_error (impl, data->file, TRUE); ++ else ++ if (!file_exists && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_FILENAME_TOO_LONG)) ++ error_filename_to_long_dialog (data->impl); ++ else ++ needs_parent_check = TRUE; ++ } ++ else ++ { ++ g_assert_not_reached(); ++ } ++ ++ if (needs_parent_check) ++ { ++ /* check that everything up to the last path component exists (i.e. the parent) */ ++ ++ data->file_exists_and_is_not_folder = file_exists && !is_folder; ++ data_ownership_taken = TRUE; ++ ++ if (priv->should_respond_get_info_cancellable) ++ g_cancellable_cancel (priv->should_respond_get_info_cancellable); ++ ++ priv->should_respond_get_info_cancellable = ++ _gtk_file_system_get_info (priv->file_system, ++ data->parent_file, ++ "standard::type,access::can-execute", ++ name_entry_get_parent_info_cb, ++ data); ++ set_busy_cursor (impl, TRUE); ++ } ++ ++out: ++ if (!data_ownership_taken) ++ { ++ g_object_unref (impl); ++ g_object_unref (data->file); ++ g_object_unref (data->parent_file); ++ g_free (data); ++ } ++ ++ g_object_unref (cancellable); ++} ++ ++static void ++paste_text_received (GtkClipboard *clipboard, ++ const gchar *text, ++ GtkFileChooserWidget *impl) ++{ ++ GFile *file; ++ ++ if (!text) ++ return; ++ ++ file = g_file_new_for_uri (text); ++ ++ if (!gtk_file_chooser_widget_select_file (GTK_FILE_CHOOSER (impl), file, NULL)) ++ location_popup_handler (impl, text); ++ ++ g_object_unref (file); ++} ++ ++/* Handler for the "location-popup-on-paste" keybinding signal */ ++static void ++location_popup_on_paste_handler (GtkFileChooserWidget *impl) ++{ ++ GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET (impl), ++ GDK_SELECTION_CLIPBOARD); ++ gtk_clipboard_request_text (clipboard, ++ (GtkClipboardTextReceivedFunc) paste_text_received, ++ impl); ++} ++ ++/* Implementation for GtkFileChooserEmbed::should_respond() */ ++static void ++add_selection_to_recent_list (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GSList *files; ++ GSList *l; ++ ++ files = gtk_file_chooser_widget_get_files (GTK_FILE_CHOOSER (impl)); ++ ++ for (l = files; l; l = l->next) ++ { ++ GFile *file = l->data; ++ char *uri; ++ ++ uri = g_file_get_uri (file); ++ if (uri) ++ { ++ gtk_recent_manager_add_item (priv->recent_manager, uri); ++ g_free (uri); ++ } ++ } ++ ++ g_slist_free_full (files, g_object_unref); ++} ++ ++static gboolean ++gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser_embed); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *toplevel; ++ GtkWidget *current_focus; ++ gboolean retval; ++ ++ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (impl)); ++ g_assert (GTK_IS_WINDOW (toplevel)); ++ ++ retval = FALSE; ++ ++ current_focus = gtk_window_get_focus (GTK_WINDOW (toplevel)); ++ ++ if (current_focus == priv->browse_files_tree_view) ++ { ++ /* The following array encodes what we do based on the priv->action and the ++ * number of files selected. ++ */ ++ typedef enum { ++ NOOP, /* Do nothing (don't respond) */ ++ RESPOND, /* Respond immediately */ ++ RESPOND_OR_SWITCH, /* Respond immediately if the selected item is a file; switch to it if it is a folder */ ++ ALL_FILES, /* Respond only if everything selected is a file */ ++ ALL_FOLDERS, /* Respond only if everything selected is a folder */ ++ SAVE_ENTRY, /* Go to the code for handling the save entry */ ++ NOT_REACHED /* Sanity check */ ++ } ActionToTake; ++ static const ActionToTake what_to_do[4][3] = { ++ /* 0 selected 1 selected many selected */ ++ /* ACTION_OPEN */ { NOOP, RESPOND_OR_SWITCH, ALL_FILES }, ++ /* ACTION_SAVE */ { SAVE_ENTRY, RESPOND_OR_SWITCH, NOT_REACHED }, ++ /* ACTION_SELECT_FOLDER */ { RESPOND, ALL_FOLDERS, ALL_FOLDERS }, ++ /* ACTION_CREATE_FOLDER */ { SAVE_ENTRY, ALL_FOLDERS, NOT_REACHED } ++ }; ++ ++ int num_selected; ++ gboolean all_files, all_folders; ++ int k; ++ ActionToTake action; ++ ++ file_list: ++ ++ g_assert (priv->action >= GTK_FILE_CHOOSER_ACTION_OPEN && priv->action <= GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); ++ ++ if (priv->operation_mode == OPERATION_MODE_RECENT) ++ { ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ goto save_entry; ++ else ++ { ++ retval = recent_should_respond (impl); ++ goto out; ++ } ++ } ++ ++ selection_check (impl, &num_selected, &all_files, &all_folders); ++ ++ if (num_selected > 2) ++ k = 2; ++ else ++ k = num_selected; ++ ++ action = what_to_do [priv->action] [k]; ++ ++ switch (action) ++ { ++ case NOOP: ++ return FALSE; ++ ++ case RESPOND: ++ retval = TRUE; ++ goto out; ++ ++ case RESPOND_OR_SWITCH: ++ g_assert (num_selected == 1); ++ ++ if (all_folders) ++ { ++ switch_to_selected_folder (impl); ++ return FALSE; ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ { ++ retval = should_respond_after_confirm_overwrite (impl, ++ get_display_name_from_file_list (impl), ++ priv->current_folder); ++ goto out; ++ } ++ else ++ { ++ retval = TRUE; ++ goto out; ++ } ++ ++ case ALL_FILES: ++ retval = all_files; ++ goto out; ++ ++ case ALL_FOLDERS: ++ retval = all_folders; ++ goto out; ++ ++ case SAVE_ENTRY: ++ goto save_entry; ++ ++ default: ++ g_assert_not_reached (); ++ } ++ } ++ else if ((priv->location_entry != NULL) && (current_focus == priv->location_entry)) ++ { ++ GFile *file; ++ gboolean is_well_formed, is_empty, is_file_part_empty; ++ gboolean is_folder; ++ GtkFileChooserEntry *entry; ++ ++ save_entry: ++ ++ g_assert (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER || ++ ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) && ++ priv->location_mode == LOCATION_MODE_FILENAME_ENTRY)); ++ ++ entry = GTK_FILE_CHOOSER_ENTRY (priv->location_entry); ++ check_save_entry (impl, &file, &is_well_formed, &is_empty, &is_file_part_empty, &is_folder); ++ ++ if (!is_well_formed) ++ { ++ if (!is_empty && ++ priv->action == GTK_FILE_CHOOSER_ACTION_SAVE && ++ priv->operation_mode == OPERATION_MODE_RECENT) ++ { ++ /* FIXME: ERROR_NO_FOLDER */ ++#if 0 ++ /* We'll #ifdef this out, as the fucking treeview selects its first row, ++ * thus changing our assumption that no selection is present - setting ++ * a selection causes the error message from path_bar_set_mode() to go away, ++ * but we want the user to see that message! ++ */ ++ gtk_widget_grab_focus (priv->browse_files_tree_view); ++#endif ++ } ++ /* FIXME: else show an "invalid filename" error as the pathbar mode? */ ++ ++ return FALSE; ++ } ++ ++ if (is_empty) ++ { ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ /* FIXME: ERROR_NO_FILENAME */ ++ gtk_widget_grab_focus (priv->location_entry); ++ return FALSE; ++ } ++ ++ goto file_list; ++ } ++ ++ g_assert (file != NULL); ++ ++ if (is_folder) ++ { ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ { ++ change_folder_and_display_error (impl, file, TRUE); ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ /* The folder already exists, so we do not need to create it. ++ * Just respond to terminate the dialog. ++ */ ++ retval = TRUE; ++ } ++ else ++ { ++ g_assert_not_reached (); ++ } ++ } ++ else ++ { ++ struct FileExistsData *data; ++ ++ /* We need to check whether file exists and whether it is a folder - ++ * the GtkFileChooserEntry *does* report is_folder==FALSE as a false ++ * negative (it doesn't know yet if your last path component is a ++ * folder). ++ */ ++ ++ data = g_new0 (struct FileExistsData, 1); ++ data->impl = g_object_ref (impl); ++ data->file = g_object_ref (file); ++ data->parent_file = _gtk_file_chooser_entry_get_current_folder (entry); ++ ++ if (priv->file_exists_get_info_cancellable) ++ g_cancellable_cancel (priv->file_exists_get_info_cancellable); ++ ++ priv->file_exists_get_info_cancellable = ++ _gtk_file_system_get_info (priv->file_system, file, ++ "standard::type", ++ file_exists_get_info_cb, ++ data); ++ ++ set_busy_cursor (impl, TRUE); ++ } ++ ++ g_object_unref (file); ++ } ++ else if (priv->toplevel_last_focus_widget == priv->browse_files_tree_view) ++ { ++ /* The focus is on a dialog's action area button, *and* the widget that ++ * was focused immediately before it is the file list. ++ */ ++ goto file_list; ++ } ++ else if (priv->operation_mode == OPERATION_MODE_SEARCH && priv->toplevel_last_focus_widget == priv->search_entry) ++ { ++ search_entry_activate_cb (impl); ++ return FALSE; ++ } ++ else if (priv->location_entry && priv->toplevel_last_focus_widget == priv->location_entry) ++ { ++ /* The focus is on a dialog's action area button, *and* the widget that ++ * was focused immediately before it is the location entry. ++ */ ++ goto save_entry; ++ } ++ else ++ /* The focus is on a dialog's action area button or something else */ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ goto save_entry; ++ else ++ goto file_list; ++ ++ out: ++ ++ if (retval) ++ add_selection_to_recent_list (impl); ++ ++ return retval; ++} ++ ++/* Implementation for GtkFileChooserEmbed::initial_focus() */ ++static void ++gtk_file_chooser_widget_initial_focus (GtkFileChooserEmbed *chooser_embed) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser_embed); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *widget; ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ { ++ if (priv->location_mode == LOCATION_MODE_PATH_BAR ++ || priv->operation_mode == OPERATION_MODE_RECENT) ++ widget = priv->browse_files_tree_view; ++ else ++ widget = priv->location_entry; ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ widget = priv->location_entry; ++ else ++ { ++ g_assert_not_reached (); ++ widget = NULL; ++ } ++ ++ g_assert (widget != NULL); ++ gtk_widget_grab_focus (widget); ++} ++ ++static void ++selected_foreach_get_file_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GSList **list; ++ GFile *file; ++ ++ list = data; ++ ++ gtk_tree_model_get (model, iter, MODEL_COL_FILE, &file, -1); ++ /* The file already has a new ref courtesy of gtk_tree_model_get(); ++ * this will be unreffed by the caller ++ */ ++ *list = g_slist_prepend (*list, file); ++} ++ ++static GSList * ++get_selected_files (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GSList *result; ++ GtkTreeSelection *selection; ++ ++ result = NULL; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, selected_foreach_get_file_cb, &result); ++ result = g_slist_reverse (result); ++ ++ return result; ++} ++ ++static void ++selected_foreach_get_info_cb (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GSList **list; ++ GFileInfo *info; ++ ++ list = data; ++ ++ info = _gtk_file_system_model_get_info (GTK_FILE_SYSTEM_MODEL (model), iter); ++ *list = g_slist_prepend (*list, g_object_ref (info)); ++} ++ ++static GSList * ++get_selected_infos (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GSList *result; ++ GtkTreeSelection *selection; ++ ++ result = NULL; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ gtk_tree_selection_selected_foreach (selection, selected_foreach_get_info_cb, &result); ++ result = g_slist_reverse (result); ++ ++ return result; ++} ++ ++/* Callback used from GtkSearchEngine when we get new hits */ ++static void ++search_engine_hits_added_cb (GtkSearchEngine *engine, ++ GList *hits, ++ GtkFileChooserWidget *impl) ++{ ++ GList *l, *files, *files_with_info, *infos; ++ GFile *file; ++ gboolean select = FALSE; ++ ++ if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (impl->priv->search_model), NULL) == 0) ++ select = TRUE; ++ ++ files = NULL; ++ files_with_info = NULL; ++ infos = NULL; ++ for (l = hits; l; l = l->next) ++ { ++ GtkSearchHit *hit = (GtkSearchHit *)l->data; ++ file = g_object_ref (hit->file); ++ if (hit->info) ++ { ++ files_with_info = g_list_prepend (files_with_info, file); ++ infos = g_list_prepend (infos, g_object_ref (hit->info)); ++ } ++ else ++ files = g_list_prepend (files, file); ++ } ++ ++ _gtk_file_system_model_update_files (impl->priv->search_model, ++ files_with_info, infos); ++ _gtk_file_system_model_add_and_query_files (impl->priv->search_model, ++ files, MODEL_ATTRIBUTES); ++ ++ g_list_free_full (files, g_object_unref); ++ g_list_free_full (files_with_info, g_object_unref); ++ g_list_free_full (infos, g_object_unref); ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (impl->priv->browse_files_stack), "list"); ++ if (select) ++ gtk_widget_grab_focus (impl->priv->browse_files_tree_view); ++} ++ ++/* Callback used from GtkSearchEngine when the query is done running */ ++static void ++search_engine_finished_cb (GtkSearchEngine *engine, ++ gboolean got_results, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ set_busy_cursor (impl, FALSE); ++ gtk_widget_hide (priv->search_spinner); ++ ++ if (priv->show_progress_timeout) ++ { ++ g_source_remove (priv->show_progress_timeout); ++ priv->show_progress_timeout = 0; ++ } ++ ++ if (!got_results) ++ { ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "empty"); ++ gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry)); ++ } ++} ++ ++static void ++search_engine_error_cb (GtkSearchEngine *engine, ++ const gchar *message, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data); ++ ++ search_stop_searching (impl, TRUE); ++ error_message (impl, _("Could not send the search request"), message); ++} ++ ++/* Frees the data in the search_model */ ++static void ++search_clear_model (GtkFileChooserWidget *impl, ++ gboolean remove) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (!priv->search_model) ++ return; ++ ++ if (remove && ++ gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)) == GTK_TREE_MODEL (priv->search_model)) ++ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view), NULL); ++ ++ g_clear_object (&priv->search_model); ++} ++ ++/* Stops any ongoing searches; does not touch the search_model */ ++static void ++search_stop_searching (GtkFileChooserWidget *impl, ++ gboolean remove_query) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (remove_query && priv->search_entry) ++ { ++ gtk_entry_set_text (GTK_ENTRY (priv->search_entry), ""); ++ } ++ ++ if (priv->search_engine) ++ { ++ _gtk_search_engine_stop (priv->search_engine); ++ g_signal_handlers_disconnect_by_data (priv->search_engine, impl); ++ g_clear_object (&priv->search_engine); ++ ++ set_busy_cursor (impl, FALSE); ++ gtk_widget_hide (priv->search_spinner); ++ } ++ ++ if (priv->show_progress_timeout) ++ { ++ g_source_remove (priv->show_progress_timeout); ++ priv->show_progress_timeout = 0; ++ } ++} ++ ++/* Creates the search_model and puts it in the tree view */ ++static void ++search_setup_model (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_assert (priv->search_model == NULL); ++ ++ priv->search_model = _gtk_file_system_model_new (file_system_model_set, ++ impl, ++ MODEL_COLUMN_TYPES); ++ ++ gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (priv->search_model), ++ search_sort_func, ++ impl, NULL); ++ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->search_model), ++ GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, ++ GTK_SORT_ASCENDING); ++ ++ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ GTK_TREE_MODEL (priv->search_model)); ++ ++ gtk_tree_view_column_set_sort_column_id (priv->list_name_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_time_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_size_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_type_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_location_column, -1); ++ ++ update_columns (impl, TRUE, _("Modified")); ++} ++ ++static gboolean ++show_spinner (gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_widget_show (priv->search_spinner); ++ priv->show_progress_timeout = 0; ++ ++ return G_SOURCE_REMOVE; ++} ++ ++/* Creates a new query with the specified text and launches it */ ++static void ++search_start_query (GtkFileChooserWidget *impl, ++ const gchar *query_text) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *file; ++ ++ if (gtk_stack_get_visible_child (GTK_STACK (priv->browse_files_stack)) == priv->places_view) ++ return; ++ ++ stop_loading_and_clear_list_model (impl, TRUE); ++ recent_stop_loading (impl); ++ recent_clear_model (impl, TRUE); ++ ++ search_stop_searching (impl, FALSE); ++ search_clear_model (impl, TRUE); ++ search_setup_model (impl); ++ ++ set_busy_cursor (impl, TRUE); ++ priv->show_progress_timeout = g_timeout_add (1500, show_spinner, impl); ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "list"); ++ ++ if (priv->search_engine == NULL) ++ priv->search_engine = _gtk_search_engine_new (); ++ ++ if (!priv->search_query) ++ { ++ priv->search_query = gtk_query_new (); ++ gtk_query_set_text (priv->search_query, query_text); ++ } ++ ++ file = gtk_places_sidebar_get_location (GTK_PLACES_SIDEBAR (priv->places_sidebar)); ++ if (file) ++ { ++ gtk_query_set_location (priv->search_query, file); ++ g_object_unref (file); ++ } ++ else ++ gtk_query_set_location (priv->search_query, priv->current_folder); ++ ++ _gtk_search_engine_set_model (priv->search_engine, priv->model_for_search); ++ _gtk_search_engine_set_query (priv->search_engine, priv->search_query); ++ ++ g_signal_connect (priv->search_engine, "hits-added", ++ G_CALLBACK (search_engine_hits_added_cb), impl); ++ g_signal_connect (priv->search_engine, "finished", ++ G_CALLBACK (search_engine_finished_cb), impl); ++ g_signal_connect (priv->search_engine, "error", ++ G_CALLBACK (search_engine_error_cb), impl); ++ ++ _gtk_search_engine_start (priv->search_engine); ++ ++ if (gtk_query_get_location (priv->search_query) && ++ _gtk_file_consider_as_remote (gtk_query_get_location (priv->search_query))) ++ gtk_widget_show (priv->remote_warning_bar); ++} ++ ++/* Callback used when the user presses Enter while typing on the search ++ * entry; starts the query ++ */ ++static void ++search_entry_activate_cb (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ const char *text; ++ ++ if (priv->operation_mode != OPERATION_MODE_SEARCH) ++ return; ++ ++ text = gtk_entry_get_text (GTK_ENTRY (priv->search_entry)); ++ ++ /* reset any existing query object */ ++ g_set_object (&priv->search_query, NULL); ++ ++ gtk_places_view_set_search_query (GTK_PLACES_VIEW (priv->places_view), text); ++ ++ if (text[0] != '\0') ++ search_start_query (impl, text); ++ else ++ search_stop_searching (impl, FALSE); ++} ++ ++static void ++search_entry_stop_cb (GtkFileChooserWidget *impl) ++{ ++ if (impl->priv->search_engine) ++ search_stop_searching (impl, FALSE); ++ else ++ g_object_set (impl, "search-mode", FALSE, NULL); ++} ++ ++/* Hides the path bar and creates the search entry */ ++static void ++search_setup_widgets (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ /* if there already is a query, restart it */ ++ if (priv->search_query) ++ { ++ const gchar *query; ++ ++ query = gtk_query_get_text (priv->search_query); ++ if (query) ++ { ++ gtk_entry_set_text (GTK_ENTRY (priv->search_entry), query); ++ search_start_query (impl, query); ++ } ++ else ++ { ++ g_object_unref (priv->search_query); ++ priv->search_query = NULL; ++ } ++ } ++} ++ ++/* ++ * Recent files support ++ */ ++ ++/* Frees the data in the recent_model */ ++static void ++recent_clear_model (GtkFileChooserWidget *impl, ++ gboolean remove) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (!priv->recent_model) ++ return; ++ ++ if (remove) ++ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view), NULL); ++ ++ g_set_object (&priv->recent_model, NULL); ++} ++ ++/* Stops any ongoing loading of the recent files list; does ++ * not touch the recent_model ++ */ ++static void ++recent_stop_loading (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->load_recent_id) ++ { ++ g_source_remove (priv->load_recent_id); ++ priv->load_recent_id = 0; ++ } ++} ++ ++static void ++recent_setup_model (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_assert (priv->recent_model == NULL); ++ ++ priv->recent_model = _gtk_file_system_model_new (file_system_model_set, ++ impl, ++ MODEL_COLUMN_TYPES); ++ ++ _gtk_file_system_model_set_filter (priv->recent_model, priv->current_filter); ++ gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (priv->recent_model), ++ recent_sort_func, ++ impl, NULL); ++ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->recent_model), ++ GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, ++ GTK_SORT_DESCENDING); ++} ++ ++typedef struct ++{ ++ GtkFileChooserWidget *impl; ++ GList *items; ++} RecentLoadData; ++ ++static void ++recent_idle_cleanup (gpointer data) ++{ ++ RecentLoadData *load_data = data; ++ GtkFileChooserWidget *impl = load_data->impl; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view), ++ GTK_TREE_MODEL (priv->recent_model)); ++ gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1); ++ ++ gtk_tree_view_column_set_sort_column_id (priv->list_name_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_time_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_size_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_type_column, -1); ++ gtk_tree_view_column_set_sort_column_id (priv->list_location_column, -1); ++ ++ update_columns (impl, TRUE, _("Accessed")); ++ ++ set_busy_cursor (impl, FALSE); ++ ++ priv->load_recent_id = 0; ++ ++ g_free (load_data); ++} ++ ++static gboolean ++recent_item_is_private (GtkRecentInfo *info) ++{ ++ gboolean is_private = FALSE; ++ ++ if (gtk_recent_info_get_private_hint (info)) ++ { ++ const gchar *app_name = g_get_application_name (); ++ gchar **recent_apps = gtk_recent_info_get_applications (info, NULL); ++ is_private = !g_strv_contains ((const char *const*) recent_apps, ++ app_name); ++ g_strfreev (recent_apps); ++ } ++ ++ return is_private; ++} ++ ++/* Populates the file system model with the GtkRecentInfo* items ++ * in the provided list; frees the items ++ */ ++static void ++populate_model_with_recent_items (GtkFileChooserWidget *impl, ++ GList *items) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gint limit; ++ GList *l; ++ gint n; ++ ++ limit = DEFAULT_RECENT_FILES_LIMIT; ++ ++ n = 0; ++ ++ for (l = items; l; l = l->next) ++ { ++ GtkRecentInfo *info = l->data; ++ GFile *file; ++ ++ if (recent_item_is_private (info)) ++ continue; ++ ++ file = g_file_new_for_uri (gtk_recent_info_get_uri (info)); ++ _gtk_file_system_model_add_and_query_file (priv->recent_model, ++ file, ++ MODEL_ATTRIBUTES); ++ g_object_unref (file); ++ ++ n++; ++ if (limit != -1 && n >= limit) ++ break; ++ } ++ ++ g_set_object (&priv->model_for_search, priv->recent_model); ++} ++ ++static void ++populate_model_with_folders (GtkFileChooserWidget *impl, ++ GList *items) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GList *folders; ++ GList *l; ++ ++ folders = _gtk_file_chooser_extract_recent_folders (items); ++ ++ for (l = folders; l; l = l->next) ++ _gtk_file_system_model_add_and_query_file (priv->recent_model, ++ G_FILE (l->data), ++ MODEL_ATTRIBUTES); ++ ++ g_list_free_full (folders, g_object_unref); ++} ++ ++static gboolean ++recent_idle_load (gpointer data) ++{ ++ RecentLoadData *load_data = data; ++ GtkFileChooserWidget *impl = load_data->impl; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (!priv->recent_manager) ++ return FALSE; ++ ++ load_data->items = gtk_recent_manager_get_items (priv->recent_manager); ++ if (!load_data->items) ++ return FALSE; ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN) ++ populate_model_with_recent_items (impl, load_data->items); ++ else ++ populate_model_with_folders (impl, load_data->items); ++ ++ g_list_free_full (load_data->items, (GDestroyNotify) gtk_recent_info_unref); ++ load_data->items = NULL; ++ ++ return FALSE; ++} ++ ++static void ++recent_start_loading (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ RecentLoadData *load_data; ++ ++ recent_stop_loading (impl); ++ recent_clear_model (impl, TRUE); ++ recent_setup_model (impl); ++ set_busy_cursor (impl, TRUE); ++ ++ g_assert (priv->load_recent_id == 0); ++ ++ load_data = g_new (RecentLoadData, 1); ++ load_data->impl = impl; ++ load_data->items = NULL; ++ ++ /* begin lazy loading the recent files into the model */ ++ priv->load_recent_id = gdk_threads_add_idle_full (G_PRIORITY_DEFAULT, ++ recent_idle_load, ++ load_data, ++ recent_idle_cleanup); ++ g_source_set_name_by_id (priv->load_recent_id, "[gtk+] recent_idle_load"); ++} ++ ++/* Called from ::should_respond(). We return whether there are selected ++ * files in the recent files list. ++ */ ++static gboolean ++recent_should_respond (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreeSelection *selection; ++ ++ g_assert (priv->operation_mode == OPERATION_MODE_RECENT); ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ return (gtk_tree_selection_count_selected_rows (selection) != 0); ++} ++ ++static void ++set_current_filter (GtkFileChooserWidget *impl, ++ GtkFileFilter *filter) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->current_filter != filter) ++ { ++ int filter_index; ++ ++ /* NULL filters are allowed to reset to non-filtered status */ ++ filter_index = g_slist_index (priv->filters, filter); ++ if (priv->filters && filter && filter_index < 0) ++ return; ++ ++ if (priv->current_filter) ++ g_object_unref (priv->current_filter); ++ priv->current_filter = filter; ++ if (priv->current_filter) ++ g_object_ref_sink (priv->current_filter); ++ ++ if (priv->filters) ++ gtk_combo_box_set_active (GTK_COMBO_BOX (priv->filter_combo), filter_index); ++ ++ clear_model_cache (impl, MODEL_COL_IS_SENSITIVE); ++ set_model_filter (impl, priv->current_filter); ++ g_object_notify (G_OBJECT (impl), "filter"); ++ } ++} ++ ++static void ++filter_combo_changed (GtkComboBox *combo_box, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gint new_index; ++ GtkFileFilter *new_filter; ++ ++ new_index = gtk_combo_box_get_active (combo_box); ++ new_filter = g_slist_nth_data (priv->filters, new_index); ++ set_current_filter (impl, new_filter); ++ ++ if (priv->location_entry != NULL) ++ _gtk_file_chooser_entry_set_file_filter (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), ++ new_filter); ++} ++ ++static void ++check_preview_change (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkTreePath *path; ++ GFile *new_file; ++ char *new_display_name; ++ GtkTreeModel *model; ++ GtkTreeSelection *selection; ++ ++ model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view)); ++ if (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_SINGLE || ++ gtk_tree_selection_get_mode (selection) == GTK_SELECTION_BROWSE) ++ { ++ GtkTreeIter iter; ++ ++ if (gtk_tree_selection_get_selected (selection, NULL, &iter)) ++ path = gtk_tree_model_get_path (model, &iter); ++ else ++ path = NULL; ++ } ++ else ++ { ++ gtk_tree_view_get_cursor (GTK_TREE_VIEW (priv->browse_files_tree_view), &path, NULL); ++ if (path && !gtk_tree_selection_path_is_selected (selection, path)) ++ { ++ gtk_tree_path_free (path); ++ path = NULL; ++ } ++ } ++ ++ if (path) ++ { ++ GtkTreeIter iter; ++ ++ gtk_tree_model_get_iter (model, &iter, path); ++ gtk_tree_model_get (model, &iter, ++ MODEL_COL_FILE, &new_file, ++ MODEL_COL_NAME, &new_display_name, ++ -1); ++ ++ gtk_tree_path_free (path); ++ } ++ else ++ { ++ new_file = NULL; ++ new_display_name = NULL; ++ } ++ ++ if (new_file != priv->preview_file && ++ !(new_file && priv->preview_file && ++ g_file_equal (new_file, priv->preview_file))) ++ { ++ if (priv->preview_file) ++ { ++ g_object_unref (priv->preview_file); ++ g_free (priv->preview_display_name); ++ } ++ ++ if (new_file) ++ { ++ priv->preview_file = new_file; ++ priv->preview_display_name = new_display_name; ++ } ++ else ++ { ++ priv->preview_file = NULL; ++ priv->preview_display_name = NULL; ++ g_free (new_display_name); ++ } ++ ++ if (priv->use_preview_label && priv->preview_label) ++ gtk_label_set_text (GTK_LABEL (priv->preview_label), priv->preview_display_name); ++ ++ g_signal_emit_by_name (impl, "update-preview"); ++ } ++ else ++ { ++ if (new_file) ++ g_object_unref (new_file); ++ ++ g_free (new_display_name); ++ } ++} ++ ++static gboolean ++list_select_func (GtkTreeSelection *selection, ++ GtkTreeModel *model, ++ GtkTreePath *path, ++ gboolean path_currently_selected, ++ gpointer data) ++{ ++ GtkFileChooserWidget *impl = data; ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ GtkTreeIter iter; ++ gboolean is_sensitive; ++ gboolean is_folder; ++ ++ if (!gtk_tree_model_get_iter (model, &iter, path)) ++ return FALSE; ++ gtk_tree_model_get (model, &iter, ++ MODEL_COL_IS_SENSITIVE, &is_sensitive, ++ MODEL_COL_IS_FOLDER, &is_folder, ++ -1); ++ if (!is_sensitive || !is_folder) ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static void ++list_selection_changed (GtkTreeSelection *selection, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)) == NULL) ++ return; ++ ++ if (priv->location_entry) ++ update_chooser_entry (impl); ++ ++ location_bar_update (impl); ++ ++ check_preview_change (impl); ++ ++ g_signal_emit_by_name (impl, "selection-changed", 0); ++} ++ ++static void ++list_cursor_changed (GtkTreeView *list, ++ GtkFileChooserWidget *impl) ++{ ++ check_preview_change (impl); ++} ++ ++/* Callback used when a row in the file list is activated */ ++static void ++list_row_activated (GtkTreeView *tree_view, ++ GtkTreePath *path, ++ GtkTreeViewColumn *column, ++ GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *file; ++ GtkTreeIter iter; ++ GtkTreeModel *model; ++ gboolean is_folder; ++ gboolean is_sensitive; ++ ++ model = gtk_tree_view_get_model (tree_view); ++ ++ if (!gtk_tree_model_get_iter (model, &iter, path)) ++ return; ++ ++ gtk_tree_model_get (model, &iter, ++ MODEL_COL_FILE, &file, ++ MODEL_COL_IS_FOLDER, &is_folder, ++ MODEL_COL_IS_SENSITIVE, &is_sensitive, ++ -1); ++ ++ if (is_sensitive && is_folder && file) ++ { ++ change_folder_and_display_error (impl, file, FALSE); ++ goto out; ++ } ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SAVE) ++ g_signal_emit_by_name (impl, "file-activated"); ++ ++ out: ++ ++ if (file) ++ g_object_unref (file); ++} ++ ++static void ++path_bar_clicked (GtkPathBar *path_bar, ++ GFile *file, ++ GFile *child_file, ++ gboolean child_is_hidden, ++ GtkFileChooserWidget *impl) ++{ ++ if (child_file) ++ pending_select_files_add (impl, child_file); ++ ++ if (!change_folder_and_display_error (impl, file, FALSE)) ++ return; ++ ++ /* Say we have "/foo/bar/[.baz]" and the user clicks on "bar". We should then ++ * show hidden files so that ".baz" appears in the file list, as it will still ++ * be shown in the path bar: "/foo/[bar]/.baz" ++ */ ++ if (child_is_hidden) ++ g_object_set (impl, "show-hidden", TRUE, NULL); ++} ++ ++static void ++update_cell_renderer_attributes (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_tree_view_column_set_attributes (priv->list_name_column, ++ priv->list_pixbuf_renderer, ++ "surface", MODEL_COL_SURFACE, ++ "sensitive", MODEL_COL_IS_SENSITIVE, ++ NULL); ++ gtk_tree_view_column_set_attributes (priv->list_name_column, ++ priv->list_name_renderer, ++ "text", MODEL_COL_NAME, ++ "ellipsize", MODEL_COL_ELLIPSIZE, ++ "sensitive", MODEL_COL_IS_SENSITIVE, ++ NULL); ++ ++ gtk_tree_view_column_set_attributes (priv->list_size_column, ++ priv->list_size_renderer, ++ "text", MODEL_COL_SIZE_TEXT, ++ "sensitive", MODEL_COL_IS_SENSITIVE, ++ NULL); ++ ++ gtk_tree_view_column_set_attributes (priv->list_type_column, ++ priv->list_type_renderer, ++ "text", MODEL_COL_TYPE, ++ "sensitive", MODEL_COL_IS_SENSITIVE, ++ NULL); ++ ++ gtk_tree_view_column_set_attributes (priv->list_time_column, ++ priv->list_date_renderer, ++ "text", MODEL_COL_DATE_TEXT, ++ "sensitive", MODEL_COL_IS_SENSITIVE, ++ NULL); ++ ++ gtk_tree_view_column_set_attributes (priv->list_time_column, ++ priv->list_time_renderer, ++ "text", MODEL_COL_TIME_TEXT, ++ "sensitive", MODEL_COL_IS_SENSITIVE, ++ NULL); ++ ++ gtk_tree_view_column_set_attributes (priv->list_location_column, ++ priv->list_location_renderer, ++ "text", MODEL_COL_LOCATION_TEXT, ++ "sensitive", MODEL_COL_IS_SENSITIVE, ++ NULL); ++ ++ update_time_renderer_visible (impl); ++} ++ ++static void ++location_set_user_text (GtkFileChooserWidget *impl, ++ const gchar *path) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ gtk_entry_set_text (GTK_ENTRY (priv->location_entry), path); ++ gtk_editable_set_position (GTK_EDITABLE (priv->location_entry), -1); ++} ++ ++static void ++location_popup_handler (GtkFileChooserWidget *impl, ++ const gchar *path) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->operation_mode != OPERATION_MODE_BROWSE) ++ { ++ operation_mode_set (impl, OPERATION_MODE_BROWSE); ++ if (priv->current_folder) ++ change_folder_and_display_error (impl, priv->current_folder, FALSE); ++ else ++ switch_to_home_dir (impl); ++ } ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || ++ priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ++ { ++ if (!path) ++ return; ++ ++ location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY); ++ location_set_user_text (impl, path); ++ } ++ else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ gtk_widget_grab_focus (priv->location_entry); ++ if (path != NULL) ++ location_set_user_text (impl, path); ++ } ++ else ++ g_assert_not_reached (); ++} ++ ++/* Handler for the "up-folder" keybinding signal */ ++static void ++up_folder_handler (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ _gtk_path_bar_up (GTK_PATH_BAR (priv->browse_path_bar)); ++} ++ ++/* Handler for the "down-folder" keybinding signal */ ++static void ++down_folder_handler (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ _gtk_path_bar_down (GTK_PATH_BAR (priv->browse_path_bar)); ++} ++ ++/* Handler for the "home-folder" keybinding signal */ ++static void ++home_folder_handler (GtkFileChooserWidget *impl) ++{ ++ switch_to_home_dir (impl); ++} ++ ++/* Handler for the "desktop-folder" keybinding signal */ ++static void ++desktop_folder_handler (GtkFileChooserWidget *impl) ++{ ++ const char *name; ++ ++ /* "To disable a directory, point it to the homedir." ++ * See http://freedesktop.org/wiki/Software/xdg-user-dirs ++ */ ++ name = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP); ++ if (!g_strcmp0 (name, g_get_home_dir ())) ++ return; ++ ++ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), name); ++} ++ ++/* Handler for the "search-shortcut" keybinding signal */ ++static void ++search_shortcut_handler (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ if (priv->operation_mode == OPERATION_MODE_SEARCH) ++ { ++ operation_mode_set (impl, OPERATION_MODE_BROWSE); ++ if (priv->current_folder) ++ change_folder_and_display_error (impl, priv->current_folder, FALSE); ++ else ++ switch_to_home_dir (impl); ++ } ++ else ++ operation_mode_set (impl, OPERATION_MODE_SEARCH); ++} ++ ++/* Handler for the "recent-shortcut" keybinding signal */ ++static void ++recent_shortcut_handler (GtkFileChooserWidget *impl) ++{ ++ operation_mode_set (impl, OPERATION_MODE_RECENT); ++} ++ ++/* Handler for the "places-shortcut" keybinding signal */ ++static void ++places_shortcut_handler (GtkFileChooserWidget *impl) ++{ ++ gtk_widget_child_focus (impl->priv->places_sidebar, GTK_DIR_LEFT); ++} ++ ++static void ++quick_bookmark_handler (GtkFileChooserWidget *impl, ++ gint bookmark_index) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GFile *file; ++ ++ file = gtk_places_sidebar_get_nth_bookmark (GTK_PLACES_SIDEBAR (priv->places_sidebar), bookmark_index); ++ ++ if (file) ++ { ++ change_folder_and_display_error (impl, file, FALSE); ++ g_object_unref (file); ++ } ++} ++ ++static void ++show_hidden_handler (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_object_set (impl, "show-hidden", !priv->show_hidden, NULL); ++} ++ ++static void ++add_normal_and_shifted_binding (GtkBindingSet *binding_set, ++ guint keyval, ++ GdkModifierType modifiers, ++ const gchar *signal_name) ++{ ++ gtk_binding_entry_add_signal (binding_set, ++ keyval, modifiers, ++ signal_name, 0); ++ ++ gtk_binding_entry_add_signal (binding_set, ++ keyval, modifiers | GDK_SHIFT_MASK, ++ signal_name, 0); ++} ++ ++static void ++gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) ++{ ++ static const guint quick_bookmark_keyvals[10] = { ++ GDK_KEY_1, GDK_KEY_2, GDK_KEY_3, GDK_KEY_4, GDK_KEY_5, GDK_KEY_6, GDK_KEY_7, GDK_KEY_8, GDK_KEY_9, GDK_KEY_0 ++ }; ++ GObjectClass *gobject_class = G_OBJECT_CLASS (class); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); ++ GtkBindingSet *binding_set; ++ gint i; ++ ++ gobject_class->finalize = gtk_file_chooser_widget_finalize; ++ gobject_class->constructed = gtk_file_chooser_widget_constructed; ++ gobject_class->set_property = gtk_file_chooser_widget_set_property; ++ gobject_class->get_property = gtk_file_chooser_widget_get_property; ++ gobject_class->dispose = gtk_file_chooser_widget_dispose; ++ ++ widget_class->show_all = gtk_file_chooser_widget_show_all; ++ widget_class->realize = gtk_file_chooser_widget_realize; ++ widget_class->map = gtk_file_chooser_widget_map; ++ widget_class->unmap = gtk_file_chooser_widget_unmap; ++ widget_class->hierarchy_changed = gtk_file_chooser_widget_hierarchy_changed; ++ widget_class->style_updated = gtk_file_chooser_widget_style_updated; ++ widget_class->screen_changed = gtk_file_chooser_widget_screen_changed; ++ widget_class->key_press_event = gtk_file_chooser_widget_key_press_event; ++ ++ /* ++ * Signals ++ */ ++ ++ /** ++ * GtkFileChooserWidget::location-popup: ++ * @widget: the object which received the signal ++ * @path: a string that gets put in the text entry for the file name ++ * ++ * The ::location-popup signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser show a "Location" prompt which ++ * the user can use to manually type the name of the file he wishes to select. ++ * ++ * The default bindings for this signal are `Control + L` with a @path string ++ * of "" (the empty string). It is also bound to `/` with a @path string of ++ * "`/`" (a slash): this lets you type `/` and immediately type a path name. ++ * On Unix systems, this is bound to `~` (tilde) with a @path string of "~" ++ * itself for access to home directories. ++ */ ++ signals[LOCATION_POPUP] = ++ g_signal_new_class_handler (I_("location-popup"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (location_popup_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 1, G_TYPE_STRING); ++ ++ /** ++ * GtkFileChooserWidget::location-popup-on-paste: ++ * @widget: the object which received the signal ++ * ++ * The ::location-popup-on-paste signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser show a "Location" prompt when the user ++ * pastes into a #GtkFileChooserWidget. ++ * ++ * The default binding for this signal is `Control + V`. ++ */ ++ signals[LOCATION_POPUP_ON_PASTE] = ++ g_signal_new_class_handler (I_("location-popup-on-paste"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (location_popup_on_paste_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::location-toggle-popup: ++ * @widget: the object which received the signal ++ * ++ * The ::location-toggle-popup signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to toggle the visibility of a "Location" prompt which the user ++ * can use to manually type the name of the file he wishes to select. ++ * ++ * The default binding for this signal is `Control + L`. ++ */ ++ signals[LOCATION_TOGGLE_POPUP] = ++ g_signal_new_class_handler (I_("location-toggle-popup"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (location_toggle_popup_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::up-folder: ++ * @widget: the object which received the signal ++ * ++ * The ::up-folder signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser go to the parent of the current folder ++ * in the file hierarchy. ++ * ++ * The default binding for this signal is `Alt + Up`. ++ */ ++ signals[UP_FOLDER] = ++ g_signal_new_class_handler (I_("up-folder"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (up_folder_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::down-folder: ++ * @widget: the object which received the signal ++ * ++ * The ::down-folder signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser go to a child of the current folder ++ * in the file hierarchy. The subfolder that will be used is displayed in the ++ * path bar widget of the file chooser. For example, if the path bar is showing ++ * "/foo/bar/baz", with bar currently displayed, then this will cause the file ++ * chooser to switch to the "baz" subfolder. ++ * ++ * The default binding for this signal is `Alt + Down`. ++ */ ++ signals[DOWN_FOLDER] = ++ g_signal_new_class_handler (I_("down-folder"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (down_folder_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::home-folder: ++ * @widget: the object which received the signal ++ * ++ * The ::home-folder signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser show the user's home ++ * folder in the file list. ++ * ++ * The default binding for this signal is `Alt + Home`. ++ */ ++ signals[HOME_FOLDER] = ++ g_signal_new_class_handler (I_("home-folder"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (home_folder_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::desktop-folder: ++ * @widget: the object which received the signal ++ * ++ * The ::desktop-folder signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser show the user's Desktop ++ * folder in the file list. ++ * ++ * The default binding for this signal is `Alt + D`. ++ */ ++ signals[DESKTOP_FOLDER] = ++ g_signal_new_class_handler (I_("desktop-folder"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (desktop_folder_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::quick-bookmark: ++ * @widget: the object which received the signal ++ * @bookmark_index: the number of the bookmark to switch to ++ * ++ * The ::quick-bookmark signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser switch to the bookmark specified ++ * in the @bookmark_index parameter. For example, if you have three bookmarks, ++ * you can pass 0, 1, 2 to this signal to switch to each of them, respectively. ++ * ++ * The default binding for this signal is `Alt + 1`, `Alt + 2`, ++ * etc. until `Alt + 0`. Note that in the default binding, that ++ * `Alt + 1` is actually defined to switch to the bookmark at index ++ * 0, and so on successively; `Alt + 0` is defined to switch to the ++ * bookmark at index 10. ++ */ ++ signals[QUICK_BOOKMARK] = ++ g_signal_new_class_handler (I_("quick-bookmark"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (quick_bookmark_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 1, G_TYPE_INT); ++ ++ /** ++ * GtkFileChooserWidget::show-hidden: ++ * @widget: the object which received the signal ++ * ++ * The ::show-hidden signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser display hidden files. ++ * ++ * The default binding for this signal is `Control + H`. ++ */ ++ signals[SHOW_HIDDEN] = ++ g_signal_new_class_handler (I_("show-hidden"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (show_hidden_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::search-shortcut: ++ * @widget: the object which received the signal ++ * ++ * The ::search-shortcut signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser show the search entry. ++ * ++ * The default binding for this signal is `Alt + S`. ++ */ ++ signals[SEARCH_SHORTCUT] = ++ g_signal_new_class_handler (I_("search-shortcut"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (search_shortcut_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::recent-shortcut: ++ * @widget: the object which received the signal ++ * ++ * The ::recent-shortcut signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to make the file chooser show the Recent location. ++ * ++ * The default binding for this signal is `Alt + R`. ++ */ ++ signals[RECENT_SHORTCUT] = ++ g_signal_new_class_handler (I_("recent-shortcut"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (recent_shortcut_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ /** ++ * GtkFileChooserWidget::places-shortcut: ++ * @widget: the object which received the signal ++ * ++ * The ::places-shortcut signal is a [keybinding signal][GtkBindingSignal] ++ * which gets emitted when the user asks for it. ++ * ++ * This is used to move the focus to the places sidebar. ++ * ++ * The default binding for this signal is `Alt + P`. ++ */ ++ signals[PLACES_SHORTCUT] = ++ g_signal_new_class_handler (I_("places-shortcut"), ++ G_OBJECT_CLASS_TYPE (class), ++ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, ++ G_CALLBACK (places_shortcut_handler), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); ++ ++ binding_set = gtk_binding_set_by_class (class); ++ ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_l, GDK_CONTROL_MASK, ++ "location-toggle-popup", ++ 0); ++ ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_v, GDK_CONTROL_MASK, ++ "location-popup-on-paste", ++ 0); ++ ++ add_normal_and_shifted_binding (binding_set, ++ GDK_KEY_Up, GDK_MOD1_MASK, ++ "up-folder"); ++ ++ add_normal_and_shifted_binding (binding_set, ++ GDK_KEY_KP_Up, GDK_MOD1_MASK, ++ "up-folder"); ++ ++ add_normal_and_shifted_binding (binding_set, ++ GDK_KEY_Down, GDK_MOD1_MASK, ++ "down-folder"); ++ add_normal_and_shifted_binding (binding_set, ++ GDK_KEY_KP_Down, GDK_MOD1_MASK, ++ "down-folder"); ++ ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_Home, GDK_MOD1_MASK, ++ "home-folder", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_KP_Home, GDK_MOD1_MASK, ++ "home-folder", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_d, GDK_MOD1_MASK, ++ "desktop-folder", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_h, GDK_CONTROL_MASK, ++ "show-hidden", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_s, GDK_MOD1_MASK, ++ "search-shortcut", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_f, GDK_CONTROL_MASK, ++ "search-shortcut", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_r, GDK_MOD1_MASK, ++ "recent-shortcut", ++ 0); ++ gtk_binding_entry_add_signal (binding_set, ++ GDK_KEY_p, GDK_MOD1_MASK, ++ "places-shortcut", ++ 0); ++ ++ for (i = 0; i < 10; i++) ++ gtk_binding_entry_add_signal (binding_set, ++ quick_bookmark_keyvals[i], GDK_MOD1_MASK, ++ "quick-bookmark", ++ 1, G_TYPE_INT, i); ++ ++ g_object_class_install_property (gobject_class, PROP_SEARCH_MODE, ++ g_param_spec_boolean ("search-mode", ++ P_("Search mode"), ++ P_("Search mode"), ++ FALSE, ++ G_PARAM_READWRITE)); ++ ++ g_object_class_install_property (gobject_class, PROP_SUBTITLE, ++ g_param_spec_string ("subtitle", ++ P_("Subtitle"), ++ P_("Subtitle"), ++ "", ++ G_PARAM_READABLE)); ++ ++ _gtk_file_chooser_install_properties (gobject_class); ++ ++ /* Bind class to template */ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gtk/libgtk/ui/gtkfilechooserwidget.ui"); ++ ++ /* A *lot* of widgets that we need to handle .... */ ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_widgets_hpaned); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_files_stack); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, places_sidebar); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, places_view); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_files_tree_view); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_files_swin); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_header_revealer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_header_stack); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_new_folder_button); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_path_bar_size_group); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_path_bar); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, filter_combo_hbox); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, filter_combo); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, preview_box); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_align); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_and_filters); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, location_entry_box); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, search_entry); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, search_spinner); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_name_column); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_pixbuf_renderer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_name_renderer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_time_column); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_date_renderer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_time_renderer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_size_column); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_size_renderer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_type_column); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_type_renderer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_location_column); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_location_renderer); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, new_folder_name_entry); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, new_folder_create_button); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, new_folder_error_label); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, new_folder_popover); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_name_entry); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_rename_button); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_error_label); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_popover); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, remote_warning_bar); ++ ++ /* And a *lot* of callbacks to bind ... */ ++ gtk_widget_class_bind_template_callback (widget_class, browse_files_key_press_event_cb); ++ gtk_widget_class_bind_template_callback (widget_class, file_list_drag_drop_cb); ++ gtk_widget_class_bind_template_callback (widget_class, file_list_drag_data_received_cb); ++ gtk_widget_class_bind_template_callback (widget_class, list_popup_menu_cb); ++ gtk_widget_class_bind_template_callback (widget_class, file_list_query_tooltip_cb); ++ gtk_widget_class_bind_template_callback (widget_class, list_button_press_event_cb); ++ gtk_widget_class_bind_template_callback (widget_class, list_row_activated); ++ gtk_widget_class_bind_template_callback (widget_class, file_list_drag_begin_cb); ++ gtk_widget_class_bind_template_callback (widget_class, file_list_drag_motion_cb); ++ gtk_widget_class_bind_template_callback (widget_class, file_list_drag_end_cb); ++ gtk_widget_class_bind_template_callback (widget_class, list_selection_changed); ++ gtk_widget_class_bind_template_callback (widget_class, list_cursor_changed); ++ gtk_widget_class_bind_template_callback (widget_class, filter_combo_changed); ++ gtk_widget_class_bind_template_callback (widget_class, path_bar_clicked); ++ gtk_widget_class_bind_template_callback (widget_class, places_sidebar_open_location_cb); ++ gtk_widget_class_bind_template_callback (widget_class, places_sidebar_show_error_message_cb); ++ gtk_widget_class_bind_template_callback (widget_class, places_sidebar_show_other_locations_with_flags_cb); ++ gtk_widget_class_bind_template_callback (widget_class, search_entry_activate_cb); ++ gtk_widget_class_bind_template_callback (widget_class, search_entry_stop_cb); ++ gtk_widget_class_bind_template_callback (widget_class, new_folder_popover_active); ++ gtk_widget_class_bind_template_callback (widget_class, new_folder_name_changed); ++ gtk_widget_class_bind_template_callback (widget_class, new_folder_create_clicked); ++ gtk_widget_class_bind_template_callback (widget_class, rename_file_name_changed); ++ gtk_widget_class_bind_template_callback (widget_class, rename_file_rename_clicked); ++ gtk_widget_class_bind_template_callback (widget_class, rename_file_end); ++ ++ gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE); ++ gtk_widget_class_set_css_name (widget_class, "filechooser"); ++} ++ ++static void ++post_process_ui (GtkFileChooserWidget *impl) ++{ ++ GtkTreeSelection *selection; ++ GtkCellRenderer *cell; ++ AtkObject *atk_obj; ++ GList *cells; ++ GFile *file; ++ ++ /* Some qdata, qdata can't be set with GtkBuilder */ ++ g_object_set_data (G_OBJECT (impl->priv->browse_files_tree_view), "fmq-name", "file_list"); ++ g_object_set_data (G_OBJECT (impl->priv->browse_files_tree_view), I_("GtkFileChooserWidget"), impl); ++ ++ /* Setup file list treeview */ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->priv->browse_files_tree_view)); ++ gtk_tree_selection_set_select_function (selection, ++ list_select_func, ++ impl, NULL); ++ gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (impl->priv->browse_files_tree_view), ++ GDK_BUTTON1_MASK, ++ NULL, 0, ++ GDK_ACTION_COPY | GDK_ACTION_MOVE); ++ gtk_drag_source_add_uri_targets (impl->priv->browse_files_tree_view); ++ ++ gtk_drag_dest_set (impl->priv->browse_files_tree_view, ++ GTK_DEST_DEFAULT_ALL, ++ NULL, 0, ++ GDK_ACTION_COPY | GDK_ACTION_MOVE); ++ gtk_drag_dest_add_uri_targets (impl->priv->browse_files_tree_view); ++ ++ /* File browser treemodel columns are shared between GtkFileChooser implementations, ++ * so we don't set cell renderer attributes in GtkBuilder, but rather keep that ++ * in code. ++ */ ++ file_list_set_sort_column_ids (impl); ++ update_cell_renderer_attributes (impl); ++ ++ /* Get the combo's text renderer and set ellipsize parameters, ++ * perhaps GtkComboBoxText should declare the cell renderer ++ * as an 'internal-child', then we could configure it in GtkBuilder ++ * instead of hard coding it here. ++ */ ++ cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (impl->priv->filter_combo)); ++ g_assert (cells); ++ cell = cells->data; ++ g_object_set (G_OBJECT (cell), ++ "ellipsize", PANGO_ELLIPSIZE_END, ++ NULL); ++ ++ g_list_free (cells); ++ ++ /* Set the GtkPathBar file system backend */ ++ _gtk_path_bar_set_file_system (GTK_PATH_BAR (impl->priv->browse_path_bar), impl->priv->file_system); ++ file = g_file_new_for_path ("/"); ++ _gtk_path_bar_set_file (GTK_PATH_BAR (impl->priv->browse_path_bar), file, FALSE); ++ g_object_unref (file); ++ ++ /* Set the fixed size icon renderer, this requires ++ * that priv->icon_size be already setup. ++ */ ++ set_icon_cell_renderer_fixed_size (impl); ++ ++ atk_obj = gtk_widget_get_accessible (impl->priv->browse_new_folder_button); ++ if (GTK_IS_ACCESSIBLE (atk_obj)) ++ atk_object_set_name (atk_obj, _("Create Folder")); ++ ++ gtk_popover_set_default_widget (GTK_POPOVER (impl->priv->new_folder_popover), impl->priv->new_folder_create_button); ++ gtk_popover_set_default_widget (GTK_POPOVER (impl->priv->rename_file_popover), impl->priv->rename_file_rename_button); ++ gtk_popover_set_relative_to (GTK_POPOVER (impl->priv->rename_file_popover), impl->priv->browse_files_tree_view); ++ ++ add_actions (impl); ++} ++ ++void ++gtk_file_chooser_widget_set_save_entry (GtkFileChooserWidget *impl, ++ GtkWidget *entry) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ ++ g_return_if_fail (GTK_IS_FILE_CHOOSER_WIDGET (impl)); ++ g_return_if_fail (entry == NULL || GTK_IS_FILE_CHOOSER_ENTRY (entry)); ++ ++ priv->external_entry = entry; ++ ++ if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE || ++ priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) ++ { ++ save_widgets_destroy (impl); ++ save_widgets_create (impl); ++ } ++} ++ ++static void ++gtk_file_chooser_widget_init (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv; ++ ++ profile_start ("start", NULL); ++#ifdef PROFILE_FILE_CHOOSER ++ access ("MARK: *** CREATE FILE CHOOSER", F_OK); ++#endif ++ impl->priv = gtk_file_chooser_widget_get_instance_private (impl); ++ priv = impl->priv; ++ ++ priv->local_only = TRUE; ++ priv->preview_widget_active = TRUE; ++ priv->use_preview_label = TRUE; ++ priv->select_multiple = FALSE; ++ priv->show_hidden = FALSE; ++ priv->show_size_column = TRUE; ++ priv->show_type_column = TRUE; ++ priv->type_format = TYPE_FORMAT_MIME; ++ priv->icon_size = FALLBACK_ICON_SIZE; ++ priv->load_state = LOAD_EMPTY; ++ priv->reload_state = RELOAD_EMPTY; ++ priv->pending_select_files = NULL; ++ priv->location_mode = LOCATION_MODE_PATH_BAR; ++ priv->operation_mode = OPERATION_MODE_BROWSE; ++ priv->sort_column = MODEL_COL_NAME; ++ priv->sort_order = GTK_SORT_ASCENDING; ++ priv->recent_manager = gtk_recent_manager_get_default (); ++ priv->create_folders = TRUE; ++ priv->auto_selecting_first_row = FALSE; ++ priv->renamed_file = NULL; ++ ++ /* Ensure GTK+ private types used by the template ++ * definition before calling gtk_widget_init_template() ++ */ ++ g_type_ensure (GTK_TYPE_PATH_BAR); ++ g_type_ensure (GTK_TYPE_PLACES_VIEW); ++ ++ gtk_widget_init_template (GTK_WIDGET (impl)); ++ gtk_widget_set_size_request (priv->browse_files_tree_view, 280, -1); ++ ++ set_file_system_backend (impl); ++ ++ priv->bookmarks_manager = _gtk_bookmarks_manager_new (NULL, NULL); ++ ++ priv->long_press_gesture = gtk_gesture_long_press_new (priv->browse_files_tree_view); ++ gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (priv->long_press_gesture), TRUE); ++ g_signal_connect (priv->long_press_gesture, "pressed", ++ G_CALLBACK (long_press_cb), impl); ++ ++ /* Setup various attributes and callbacks in the UI ++ * which cannot be done with GtkBuilder. ++ */ ++ post_process_ui (impl); ++ ++ profile_end ("end", NULL); ++} ++ ++/** ++ * gtk_file_chooser_widget_new: ++ * @action: Open or save mode for the widget ++ * ++ * Creates a new #GtkFileChooserWidget. This is a file chooser widget that can ++ * be embedded in custom windows, and it is the same widget that is used by ++ * #GtkFileChooserDialog. ++ * ++ * Returns: a new #GtkFileChooserWidget ++ * ++ * Since: 2.4 ++ **/ ++GtkWidget * ++gtk_file_chooser_widget_new (GtkFileChooserAction action) ++{ ++ return g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET, ++ "action", action, ++ NULL); ++} ++ ++static void ++gtk_file_chooser_widget_add_choice (GtkFileChooser *chooser, ++ const char *id, ++ const char *label, ++ const char **options, ++ const char **option_labels) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *widget; ++ ++ if (priv->choices == NULL) ++ { ++ priv->choices = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); ++ priv->choice_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); ++ set_extra_widget (impl, priv->choice_box); ++ } ++ else if (g_hash_table_lookup (priv->choices, id)) ++ { ++ g_warning ("Duplicate choice %s", id); ++ return; ++ } ++ ++ if (options) ++ { ++ GtkWidget *box; ++ GtkWidget *combo; ++ int i; ++ ++ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); ++ gtk_container_add (GTK_CONTAINER (box), gtk_label_new (label)); ++ ++ combo = gtk_combo_box_text_new (); ++ g_hash_table_insert (priv->choices, g_strdup (id), combo); ++ gtk_container_add (GTK_CONTAINER (box), combo); ++ ++ for (i = 0; options[i]; i++) ++ gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), ++ options[i], option_labels[i]); ++ ++ widget = box; ++ } ++ else ++ { ++ GtkWidget *check; ++ ++ check = gtk_check_button_new_with_label (label); ++ g_hash_table_insert (priv->choices, g_strdup (id), check); ++ ++ widget = check; ++ } ++ ++ gtk_widget_show_all (widget); ++ gtk_container_add (GTK_CONTAINER (priv->choice_box), widget); ++} ++ ++static void ++gtk_file_chooser_widget_remove_choice (GtkFileChooser *chooser, ++ const char *id) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *widget; ++ ++ if (priv->choices == NULL) ++ return; ++ ++ widget = (GtkWidget *)g_hash_table_lookup (priv->choices, id); ++ g_hash_table_remove (priv->choices, id); ++ gtk_container_remove (GTK_CONTAINER (priv->choice_box), widget); ++ ++ if (g_hash_table_size (priv->choices) == 0) ++ { ++ set_extra_widget (impl, NULL); ++ g_hash_table_unref (priv->choices); ++ priv->choices = NULL; ++ priv->choice_box = NULL; ++ } ++} ++ ++static void ++gtk_file_chooser_widget_set_choice (GtkFileChooser *chooser, ++ const char *id, ++ const char *option) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *widget; ++ ++ if (priv->choices == NULL) ++ return; ++ ++ widget = (GtkWidget *)g_hash_table_lookup (priv->choices, id); ++ ++ if (GTK_IS_COMBO_BOX (widget)) ++ gtk_combo_box_set_active_id (GTK_COMBO_BOX (widget), option); ++ else if (GTK_IS_TOGGLE_BUTTON (widget)) ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), g_str_equal (option, "true")); ++} ++ ++static const char * ++gtk_file_chooser_widget_get_choice (GtkFileChooser *chooser, ++ const char *id) ++{ ++ GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ GtkWidget *widget; ++ ++ if (priv->choices == NULL) ++ return NULL; ++ ++ widget = (GtkWidget *)g_hash_table_lookup (priv->choices, id); ++ if (GTK_IS_COMBO_BOX (widget)) ++ return gtk_combo_box_get_active_id (GTK_COMBO_BOX (widget)); ++ else if (GTK_IS_TOGGLE_BUTTON (widget)) ++ return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ? "true" : "false"; ++ ++ return NULL; ++} ++ +diff -urN '--exclude=.git' a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c +--- a/gtk/gtkflowbox.c 2025-06-09 19:54:59.001429554 -0700 ++++ b/gtk/gtkflowbox.c 2025-06-09 20:06:00.223830367 -0700 +@@ -3386,7 +3386,7 @@ + { + GdkDisplay *display; + GdkModifierType extend_mod_mask = GDK_SHIFT_MASK; +- GdkModifierType modify_mod_mask = GDK_CONTROL_MASK; ++ GdkModifierType modify_mod_mask = GDK_SUPER_MASK; + + display = gdk_display_get_default (); + if (display) +@@ -4090,14 +4090,14 @@ + gtk_flow_box_add_move_binding (binding_set, GDK_KEY_KP_Left, 0, + GTK_MOVEMENT_VISUAL_POSITIONS, -1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_SUPER_MASK, + "toggle-cursor-child", 0, NULL); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_SUPER_MASK, + "toggle-cursor-child", 0, NULL); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "select-all", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK | GDK_SHIFT_MASK, + "unselect-all", 0); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FLOW_BOX_ACCESSIBLE); +diff -urN '--exclude=.git' a/gtk/gtkiconview.c b/gtk/gtkiconview.c +--- a/gtk/gtkiconview.c 2025-06-09 19:54:59.009429632 -0700 ++++ b/gtk/gtkiconview.c 2025-06-09 20:06:00.223830367 -0700 +@@ -899,13 +899,13 @@ + _gtk_marshal_BOOLEAN__ENUM_INTv); + + /* Key bindings */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "select-all", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK | GDK_SHIFT_MASK, + "unselect-all", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_SUPER_MASK, + "toggle-cursor-item", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_SUPER_MASK, + "toggle-cursor-item", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, 0, +@@ -929,10 +929,10 @@ + gtk_icon_view_add_move_binding (binding_set, GDK_KEY_KP_Down, 0, + GTK_MOVEMENT_DISPLAY_LINES, 1); + +- gtk_icon_view_add_move_binding (binding_set, GDK_KEY_p, GDK_CONTROL_MASK, ++ gtk_icon_view_add_move_binding (binding_set, GDK_KEY_p, GDK_SUPER_MASK, + GTK_MOVEMENT_DISPLAY_LINES, -1); + +- gtk_icon_view_add_move_binding (binding_set, GDK_KEY_n, GDK_CONTROL_MASK, ++ gtk_icon_view_add_move_binding (binding_set, GDK_KEY_n, GDK_SUPER_MASK, + GTK_MOVEMENT_DISPLAY_LINES, 1); + + gtk_icon_view_add_move_binding (binding_set, GDK_KEY_Home, 0, +@@ -2446,7 +2446,7 @@ + static gboolean + button_event_modifies_selection (GdkEventButton *event) + { +- return (event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) != 0; ++ return (event->state & (GDK_SUPER_MASK | GDK_SHIFT_MASK)) != 0; + } + + static gboolean +@@ -3651,15 +3651,15 @@ + G_TYPE_ENUM, step, + G_TYPE_INT, count); + +- if ((modmask & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) ++ if ((modmask & GDK_SUPER_MASK) == GDK_SUPER_MASK) + return; + +- gtk_binding_entry_add_signal (binding_set, keyval, GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ gtk_binding_entry_add_signal (binding_set, keyval, GDK_SUPER_MASK | GDK_SHIFT_MASK, + "move-cursor", 2, + G_TYPE_ENUM, step, + G_TYPE_INT, count); + +- gtk_binding_entry_add_signal (binding_set, keyval, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, keyval, GDK_SUPER_MASK, + "move-cursor", 2, + G_TYPE_ENUM, step, + G_TYPE_INT, count); +diff -urN '--exclude=.git' a/gtk/gtklabel.c b/gtk/gtklabel.c +--- a/gtk/gtklabel.c 2025-06-09 20:05:32.327562827 -0700 ++++ b/gtk/gtklabel.c 2025-06-09 20:06:00.227830405 -0700 +@@ -1097,57 +1097,57 @@ + add_move_binding (binding_set, GDK_KEY_KP_Left, 0, + GTK_MOVEMENT_VISUAL_POSITIONS, -1); + +- add_move_binding (binding_set, GDK_KEY_f, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_f, GDK_SUPER_MASK, + GTK_MOVEMENT_LOGICAL_POSITIONS, 1); + +- add_move_binding (binding_set, GDK_KEY_b, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_b, GDK_SUPER_MASK, + GTK_MOVEMENT_LOGICAL_POSITIONS, -1); + +- add_move_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, 1); + +- add_move_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, -1); + + /* select all */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "move-cursor", 3, + G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS, + G_TYPE_INT, -1, + G_TYPE_BOOLEAN, FALSE); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "move-cursor", 3, + G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS, + G_TYPE_INT, 1, + G_TYPE_BOOLEAN, TRUE); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, + "move-cursor", 3, + G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS, + G_TYPE_INT, -1, + G_TYPE_BOOLEAN, FALSE); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, + "move-cursor", 3, + G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS, + G_TYPE_INT, 1, + G_TYPE_BOOLEAN, TRUE); + + /* unselect all */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "move-cursor", 3, + G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS, + G_TYPE_INT, 0, + G_TYPE_BOOLEAN, FALSE); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_SUPER_MASK, + "move-cursor", 3, + G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS, + G_TYPE_INT, 0, +@@ -1171,20 +1171,20 @@ + add_move_binding (binding_set, GDK_KEY_KP_End, 0, + GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); + +- add_move_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Home, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, -1); + +- add_move_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_End, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_End, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_End, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, 1); + + /* copy */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_SUPER_MASK, + "copy-clipboard", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Return, 0, +diff -urN '--exclude=.git' a/gtk/gtklistbox.c b/gtk/gtklistbox.c +--- a/gtk/gtklistbox.c 2025-06-09 19:54:59.017429709 -0700 ++++ b/gtk/gtklistbox.c 2025-06-09 20:06:00.227830405 -0700 +@@ -653,14 +653,14 @@ + gtk_list_box_add_move_binding (binding_set, GDK_KEY_KP_Page_Down, 0, + GTK_MOVEMENT_PAGES, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_SUPER_MASK, + "toggle-cursor-row", 0, NULL); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_SUPER_MASK, + "toggle-cursor-row", 0, NULL); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "select-all", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK | GDK_SHIFT_MASK, + "unselect-all", 0); + + gtk_widget_class_set_css_name (widget_class, "list"); +@@ -1488,7 +1488,7 @@ + { + GdkDisplay *display; + GdkModifierType extend_mod_mask = GDK_SHIFT_MASK; +- GdkModifierType modify_mod_mask = GDK_CONTROL_MASK; ++ GdkModifierType modify_mod_mask = GDK_SUPER_MASK; + + display = gdk_display_get_default (); + if (display) +diff -urN '--exclude=.git' a/gtk/gtknotebook.c b/gtk/gtknotebook.c +--- a/gtk/gtknotebook.c 2025-06-09 19:54:59.029429829 -0700 ++++ b/gtk/gtknotebook.c 2025-06-09 20:06:00.231830444 -0700 +@@ -622,10 +622,10 @@ + { + guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left; + +- gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, keysym, GDK_SUPER_MASK, + "move_focus_out", 1, + GTK_TYPE_DIRECTION_TYPE, direction); +- gtk_binding_entry_add_signal (binding_set, keypad_keysym, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, keypad_keysym, GDK_SUPER_MASK, + "move_focus_out", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + } +@@ -1246,20 +1246,20 @@ + GTK_TYPE_NOTEBOOK_TAB, GTK_NOTEBOOK_TAB_LAST); + + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_Page_Up, GDK_CONTROL_MASK, ++ GDK_KEY_Page_Up, GDK_SUPER_MASK, + "change-current-page", 1, + G_TYPE_INT, -1); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_Page_Down, GDK_CONTROL_MASK, ++ GDK_KEY_Page_Down, GDK_SUPER_MASK, + "change-current-page", 1, + G_TYPE_INT, 1); + + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_Page_Up, GDK_CONTROL_MASK | GDK_MOD1_MASK, ++ GDK_KEY_Page_Up, GDK_SUPER_MASK | GDK_MOD1_MASK, + "change-current-page", 1, + G_TYPE_INT, -1); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_Page_Down, GDK_CONTROL_MASK | GDK_MOD1_MASK, ++ GDK_KEY_Page_Down, GDK_SUPER_MASK | GDK_MOD1_MASK, + "change-current-page", 1, + G_TYPE_INT, 1); + +@@ -1277,8 +1277,8 @@ + add_reorder_bindings (binding_set, GDK_KEY_End, GTK_DIR_RIGHT, TRUE); + add_reorder_bindings (binding_set, GDK_KEY_End, GTK_DIR_DOWN, TRUE); + +- add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); +- add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); ++ add_tab_bindings (binding_set, GDK_MOD1_MASK, GTK_DIR_TAB_FORWARD); ++ add_tab_bindings (binding_set, GDK_MOD1_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); + + gtk_container_class_handle_border_width (container_class); + +diff -urN '--exclude=.git' a/gtk/gtkpaned.c b/gtk/gtkpaned.c +--- a/gtk/gtkpaned.c 2025-06-09 19:54:59.029429829 -0700 ++++ b/gtk/gtkpaned.c 2025-06-09 20:06:00.231830444 -0700 +@@ -637,9 +637,9 @@ + G_TYPE_BOOLEAN, TRUE); + + add_tab_bindings (binding_set, 0); +- add_tab_bindings (binding_set, GDK_CONTROL_MASK); ++ add_tab_bindings (binding_set, GDK_SUPER_MASK); + add_tab_bindings (binding_set, GDK_SHIFT_MASK); +- add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK); ++ add_tab_bindings (binding_set, GDK_SUPER_MASK | GDK_SHIFT_MASK); + + /* accept and cancel positions */ + gtk_binding_entry_add_signal (binding_set, +@@ -665,25 +665,25 @@ + /* move handle */ + add_move_binding (binding_set, GDK_KEY_Left, 0, GTK_SCROLL_STEP_LEFT); + add_move_binding (binding_set, GDK_KEY_KP_Left, 0, GTK_SCROLL_STEP_LEFT); +- add_move_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_LEFT); +- add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_LEFT); ++ add_move_binding (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, GTK_SCROLL_PAGE_LEFT); ++ add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_SUPER_MASK, GTK_SCROLL_PAGE_LEFT); + + add_move_binding (binding_set, GDK_KEY_Right, 0, GTK_SCROLL_STEP_RIGHT); +- add_move_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_RIGHT); ++ add_move_binding (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, GTK_SCROLL_PAGE_RIGHT); + add_move_binding (binding_set, GDK_KEY_KP_Right, 0, GTK_SCROLL_STEP_RIGHT); +- add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_RIGHT); ++ add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_SUPER_MASK, GTK_SCROLL_PAGE_RIGHT); + + add_move_binding (binding_set, GDK_KEY_Up, 0, GTK_SCROLL_STEP_UP); +- add_move_binding (binding_set, GDK_KEY_Up, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_UP); ++ add_move_binding (binding_set, GDK_KEY_Up, GDK_SUPER_MASK, GTK_SCROLL_PAGE_UP); + add_move_binding (binding_set, GDK_KEY_KP_Up, 0, GTK_SCROLL_STEP_UP); +- add_move_binding (binding_set, GDK_KEY_KP_Up, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_UP); ++ add_move_binding (binding_set, GDK_KEY_KP_Up, GDK_SUPER_MASK, GTK_SCROLL_PAGE_UP); + add_move_binding (binding_set, GDK_KEY_Page_Up, 0, GTK_SCROLL_PAGE_UP); + add_move_binding (binding_set, GDK_KEY_KP_Page_Up, 0, GTK_SCROLL_PAGE_UP); + + add_move_binding (binding_set, GDK_KEY_Down, 0, GTK_SCROLL_STEP_DOWN); +- add_move_binding (binding_set, GDK_KEY_Down, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_DOWN); ++ add_move_binding (binding_set, GDK_KEY_Down, GDK_SUPER_MASK, GTK_SCROLL_PAGE_DOWN); + add_move_binding (binding_set, GDK_KEY_KP_Down, 0, GTK_SCROLL_STEP_DOWN); +- add_move_binding (binding_set, GDK_KEY_KP_Down, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_DOWN); ++ add_move_binding (binding_set, GDK_KEY_KP_Down, GDK_SUPER_MASK, GTK_SCROLL_PAGE_DOWN); + add_move_binding (binding_set, GDK_KEY_Page_Down, 0, GTK_SCROLL_PAGE_RIGHT); + add_move_binding (binding_set, GDK_KEY_KP_Page_Down, 0, GTK_SCROLL_PAGE_RIGHT); + +diff -urN '--exclude=.git' a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c +--- a/gtk/gtkplacessidebar.c 2025-06-09 19:54:59.033429867 -0700 ++++ b/gtk/gtkplacessidebar.c 2025-06-09 20:06:00.231830444 -0700 +@@ -3479,7 +3479,7 @@ + + if ((event->state & modifiers) == GDK_SHIFT_MASK) + open_flags = GTK_PLACES_OPEN_NEW_TAB; +- else if ((event->state & modifiers) == GDK_CONTROL_MASK) ++ else if ((event->state & modifiers) == GDK_SUPER_MASK) + open_flags = GTK_PLACES_OPEN_NEW_WINDOW; + + open_row (GTK_SIDEBAR_ROW (row), open_flags); +@@ -3831,7 +3831,7 @@ + { + GtkPlacesOpenFlags open_flags = GTK_PLACES_OPEN_NORMAL; + +- open_flags = (event->state & GDK_CONTROL_MASK) ? ++ open_flags = (event->state & GDK_SUPER_MASK) ? + GTK_PLACES_OPEN_NEW_WINDOW : + GTK_PLACES_OPEN_NEW_TAB; + +diff -urN '--exclude=.git' a/gtk/gtkscale.c b/gtk/gtkscale.c +--- a/gtk/gtkscale.c 2025-06-09 19:54:59.045429984 -0700 ++++ b/gtk/gtkscale.c 2025-06-09 20:06:00.231830444 -0700 +@@ -835,55 +835,55 @@ + add_slider_binding (binding_set, GDK_KEY_Left, 0, + GTK_SCROLL_STEP_LEFT); + +- add_slider_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_LEFT); + + add_slider_binding (binding_set, GDK_KEY_KP_Left, 0, + GTK_SCROLL_STEP_LEFT); + +- add_slider_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Left, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_LEFT); + + add_slider_binding (binding_set, GDK_KEY_Right, 0, + GTK_SCROLL_STEP_RIGHT); + +- add_slider_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_RIGHT); + + add_slider_binding (binding_set, GDK_KEY_KP_Right, 0, + GTK_SCROLL_STEP_RIGHT); + +- add_slider_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Right, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_RIGHT); + + add_slider_binding (binding_set, GDK_KEY_Up, 0, + GTK_SCROLL_STEP_UP); + +- add_slider_binding (binding_set, GDK_KEY_Up, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_Up, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_UP); + + add_slider_binding (binding_set, GDK_KEY_KP_Up, 0, + GTK_SCROLL_STEP_UP); + +- add_slider_binding (binding_set, GDK_KEY_KP_Up, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Up, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_UP); + + add_slider_binding (binding_set, GDK_KEY_Down, 0, + GTK_SCROLL_STEP_DOWN); + +- add_slider_binding (binding_set, GDK_KEY_Down, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_Down, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_DOWN); + + add_slider_binding (binding_set, GDK_KEY_KP_Down, 0, + GTK_SCROLL_STEP_DOWN); + +- add_slider_binding (binding_set, GDK_KEY_KP_Down, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Down, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_DOWN); + +- add_slider_binding (binding_set, GDK_KEY_Page_Up, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_Page_Up, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_LEFT); + +- add_slider_binding (binding_set, GDK_KEY_KP_Page_Up, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Page_Up, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_LEFT); + + add_slider_binding (binding_set, GDK_KEY_Page_Up, 0, +@@ -892,10 +892,10 @@ + add_slider_binding (binding_set, GDK_KEY_KP_Page_Up, 0, + GTK_SCROLL_PAGE_UP); + +- add_slider_binding (binding_set, GDK_KEY_Page_Down, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_Page_Down, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_RIGHT); + +- add_slider_binding (binding_set, GDK_KEY_KP_Page_Down, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Page_Down, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_RIGHT); + + add_slider_binding (binding_set, GDK_KEY_Page_Down, 0, +@@ -912,10 +912,10 @@ + add_slider_binding (binding_set, GDK_KEY_minus, 0, + GTK_SCROLL_STEP_BACKWARD); + +- add_slider_binding (binding_set, GDK_KEY_plus, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_plus, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_FORWARD); + +- add_slider_binding (binding_set, GDK_KEY_minus, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_minus, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_BACKWARD); + + +@@ -925,10 +925,10 @@ + add_slider_binding (binding_set, GDK_KEY_KP_Subtract, 0, + GTK_SCROLL_STEP_BACKWARD); + +- add_slider_binding (binding_set, GDK_KEY_KP_Add, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Add, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_FORWARD); + +- add_slider_binding (binding_set, GDK_KEY_KP_Subtract, GDK_CONTROL_MASK, ++ add_slider_binding (binding_set, GDK_KEY_KP_Subtract, GDK_SUPER_MASK, + GTK_SCROLL_PAGE_BACKWARD); + + +diff -urN '--exclude=.git' a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c +--- a/gtk/gtkscrolledwindow.c 2025-06-09 20:05:32.335562903 -0700 ++++ b/gtk/gtkscrolledwindow.c 2025-06-09 20:06:00.235830482 -0700 +@@ -878,23 +878,23 @@ + + binding_set = gtk_binding_set_by_class (class); + +- add_scroll_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, GTK_SCROLL_STEP_BACKWARD, TRUE); +- add_scroll_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, GTK_SCROLL_STEP_FORWARD, TRUE); +- add_scroll_binding (binding_set, GDK_KEY_Up, GDK_CONTROL_MASK, GTK_SCROLL_STEP_BACKWARD, FALSE); +- add_scroll_binding (binding_set, GDK_KEY_Down, GDK_CONTROL_MASK, GTK_SCROLL_STEP_FORWARD, FALSE); ++ add_scroll_binding (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, GTK_SCROLL_STEP_BACKWARD, TRUE); ++ add_scroll_binding (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, GTK_SCROLL_STEP_FORWARD, TRUE); ++ add_scroll_binding (binding_set, GDK_KEY_Up, GDK_SUPER_MASK, GTK_SCROLL_STEP_BACKWARD, FALSE); ++ add_scroll_binding (binding_set, GDK_KEY_Down, GDK_SUPER_MASK, GTK_SCROLL_STEP_FORWARD, FALSE); + +- add_scroll_binding (binding_set, GDK_KEY_Page_Up, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_BACKWARD, TRUE); +- add_scroll_binding (binding_set, GDK_KEY_Page_Down, GDK_CONTROL_MASK, GTK_SCROLL_PAGE_FORWARD, TRUE); ++ add_scroll_binding (binding_set, GDK_KEY_Page_Up, GDK_SUPER_MASK, GTK_SCROLL_PAGE_BACKWARD, TRUE); ++ add_scroll_binding (binding_set, GDK_KEY_Page_Down, GDK_SUPER_MASK, GTK_SCROLL_PAGE_FORWARD, TRUE); + add_scroll_binding (binding_set, GDK_KEY_Page_Up, 0, GTK_SCROLL_PAGE_BACKWARD, FALSE); + add_scroll_binding (binding_set, GDK_KEY_Page_Down, 0, GTK_SCROLL_PAGE_FORWARD, FALSE); + +- add_scroll_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, GTK_SCROLL_START, TRUE); +- add_scroll_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, GTK_SCROLL_END, TRUE); ++ add_scroll_binding (binding_set, GDK_KEY_Home, GDK_SUPER_MASK, GTK_SCROLL_START, TRUE); ++ add_scroll_binding (binding_set, GDK_KEY_End, GDK_SUPER_MASK, GTK_SCROLL_END, TRUE); + add_scroll_binding (binding_set, GDK_KEY_Home, 0, GTK_SCROLL_START, FALSE); + add_scroll_binding (binding_set, GDK_KEY_End, 0, GTK_SCROLL_END, FALSE); + +- add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); +- add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); ++ add_tab_bindings (binding_set, GDK_MOD1_MASK, GTK_DIR_TAB_FORWARD); ++ add_tab_bindings (binding_set, GDK_MOD1_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE); + gtk_widget_class_set_css_name (widget_class, "scrolledwindow"); +diff -urN '--exclude=.git' a/gtk/gtksearchentry.c b/gtk/gtksearchentry.c +--- a/gtk/gtksearchentry.c 2025-06-09 19:54:59.049430025 -0700 ++++ b/gtk/gtksearchentry.c 2025-06-09 20:06:00.235830482 -0700 +@@ -254,9 +254,9 @@ + + binding_set = gtk_binding_set_by_class (klass); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_g, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_g, GDK_SUPER_MASK, + "next-match", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_g, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_g, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "previous-match", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, + "stop-search", 0); +@@ -409,7 +409,7 @@ + keyval == GDK_KEY_End || keyval == GDK_KEY_KP_End || + keyval == GDK_KEY_Page_Up || keyval == GDK_KEY_KP_Page_Up || + keyval == GDK_KEY_Page_Down || keyval == GDK_KEY_KP_Page_Down || +- ((state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) != 0)) ++ ((state & (GDK_SUPER_MASK | GDK_MOD1_MASK)) != 0)) + return TRUE; + + /* Other navigation events should get automatically +diff -urN '--exclude=.git' a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c +--- a/gtk/gtkspinbutton.c 2025-06-09 20:05:32.335562903 -0700 ++++ b/gtk/gtkspinbutton.c 2025-06-09 20:06:00.235830482 -0700 +@@ -587,10 +587,10 @@ + add_spin_binding (binding_set, GDK_KEY_KP_Down, 0, GTK_SCROLL_STEP_DOWN); + add_spin_binding (binding_set, GDK_KEY_Page_Up, 0, GTK_SCROLL_PAGE_UP); + add_spin_binding (binding_set, GDK_KEY_Page_Down, 0, GTK_SCROLL_PAGE_DOWN); +- add_spin_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, GTK_SCROLL_END); +- add_spin_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, GTK_SCROLL_START); +- add_spin_binding (binding_set, GDK_KEY_Page_Up, GDK_CONTROL_MASK, GTK_SCROLL_END); +- add_spin_binding (binding_set, GDK_KEY_Page_Down, GDK_CONTROL_MASK, GTK_SCROLL_START); ++ add_spin_binding (binding_set, GDK_KEY_End, GDK_SUPER_MASK, GTK_SCROLL_END); ++ add_spin_binding (binding_set, GDK_KEY_Home, GDK_SUPER_MASK, GTK_SCROLL_START); ++ add_spin_binding (binding_set, GDK_KEY_Page_Up, GDK_SUPER_MASK, GTK_SCROLL_END); ++ add_spin_binding (binding_set, GDK_KEY_Page_Down, GDK_SUPER_MASK, GTK_SCROLL_START); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SPIN_BUTTON_ACCESSIBLE); + gtk_widget_class_set_css_name (widget_class, "spinbutton"); +diff -urN '--exclude=.git' a/gtk/gtktextview.c b/gtk/gtktextview.c +--- a/gtk/gtktextview.c 2025-06-09 19:54:59.069430221 -0700 ++++ b/gtk/gtktextview.c 2025-06-09 20:06:00.235830482 -0700 +@@ -1502,16 +1502,16 @@ + add_move_binding (binding_set, GDK_KEY_KP_Left, 0, + GTK_MOVEMENT_VISUAL_POSITIONS, -1); + +- add_move_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, 1); + +- add_move_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_SUPER_MASK, + GTK_MOVEMENT_WORDS, -1); + + add_move_binding (binding_set, GDK_KEY_Up, 0, +@@ -1526,16 +1526,16 @@ + add_move_binding (binding_set, GDK_KEY_KP_Down, 0, + GTK_MOVEMENT_DISPLAY_LINES, 1); + +- add_move_binding (binding_set, GDK_KEY_Up, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Up, GDK_SUPER_MASK, + GTK_MOVEMENT_PARAGRAPHS, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_Up, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Up, GDK_SUPER_MASK, + GTK_MOVEMENT_PARAGRAPHS, -1); + +- add_move_binding (binding_set, GDK_KEY_Down, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Down, GDK_SUPER_MASK, + GTK_MOVEMENT_PARAGRAPHS, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_Down, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Down, GDK_SUPER_MASK, + GTK_MOVEMENT_PARAGRAPHS, 1); + + add_move_binding (binding_set, GDK_KEY_Home, 0, +@@ -1550,16 +1550,16 @@ + add_move_binding (binding_set, GDK_KEY_KP_End, 0, + GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); + +- add_move_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Home, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, -1); + +- add_move_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_End, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_End, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_End, GDK_SUPER_MASK, + GTK_MOVEMENT_BUFFER_ENDS, 1); + + add_move_binding (binding_set, GDK_KEY_Page_Up, 0, +@@ -1574,33 +1574,33 @@ + add_move_binding (binding_set, GDK_KEY_KP_Page_Down, 0, + GTK_MOVEMENT_PAGES, 1); + +- add_move_binding (binding_set, GDK_KEY_Page_Up, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Page_Up, GDK_SUPER_MASK, + GTK_MOVEMENT_HORIZONTAL_PAGES, -1); + +- add_move_binding (binding_set, GDK_KEY_KP_Page_Up, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Page_Up, GDK_SUPER_MASK, + GTK_MOVEMENT_HORIZONTAL_PAGES, -1); + +- add_move_binding (binding_set, GDK_KEY_Page_Down, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_Page_Down, GDK_SUPER_MASK, + GTK_MOVEMENT_HORIZONTAL_PAGES, 1); + +- add_move_binding (binding_set, GDK_KEY_KP_Page_Down, GDK_CONTROL_MASK, ++ add_move_binding (binding_set, GDK_KEY_KP_Page_Down, GDK_SUPER_MASK, + GTK_MOVEMENT_HORIZONTAL_PAGES, 1); + + /* Select all */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, + "select-all", 1, + G_TYPE_BOOLEAN, TRUE); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, + "select-all", 1, + G_TYPE_BOOLEAN, TRUE); + + /* Unselect all */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_SUPER_MASK, + "select-all", 1, + G_TYPE_BOOLEAN, FALSE); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "select-all", 1, + G_TYPE_BOOLEAN, FALSE); + +@@ -1622,55 +1622,55 @@ + gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK, + "backspace", 0); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, + G_TYPE_INT, -1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK | GDK_SUPER_MASK, + "delete-from-cursor", 2, + G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, + G_TYPE_INT, -1); + + /* Cut/copy/paste */ + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_SUPER_MASK, + "cut-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_SUPER_MASK, + "copy-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_SUPER_MASK, + "paste-clipboard", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK, + "cut-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SUPER_MASK, + "copy-clipboard", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SHIFT_MASK, + "paste-clipboard", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK, + "cut-clipboard", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SUPER_MASK, + "copy-clipboard", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK, + "paste-clipboard", 0); +@@ -1682,9 +1682,9 @@ + "toggle-overwrite", 0); + + /* Emoji */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_SUPER_MASK, + "insert-emoji", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_SUPER_MASK, + "insert-emoji", 0); + + /* Caret mode */ +@@ -1692,17 +1692,17 @@ + "toggle-cursor-visible", 0); + + /* Control-tab focus motion */ +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, GDK_MOD1_MASK, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_FORWARD); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, GDK_MOD1_MASK, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_FORWARD); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, GDK_SHIFT_MASK | GDK_MOD1_MASK, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, GDK_SHIFT_MASK | GDK_MOD1_MASK, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD); + +@@ -5527,11 +5527,12 @@ + gtk_text_view_commit_text (text_view, "\n"); + retval = TRUE; + } +- /* Pass through Tab as literal tab, unless Control is held down */ ++ /* Pass through Tab as literal tab, unless Command or Control is held down */ + else if ((event->keyval == GDK_KEY_Tab || + event->keyval == GDK_KEY_KP_Tab || + event->keyval == GDK_KEY_ISO_Left_Tab) && +- !(event->state & GDK_CONTROL_MASK)) ++ !(event->state & GDK_MOD1_MASK) && ++ !(event->state & GDK_SUPER_MASK)) + { + /* If the text widget isn't editable overall, or if the application + * has turned off "accepts_tab", move the focus instead +diff -urN '--exclude=.git' a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c +--- a/gtk/gtktoolbar.c 2025-06-09 19:54:59.069430221 -0700 ++++ b/gtk/gtktoolbar.c 2025-06-09 20:06:00.235830482 -0700 +@@ -379,11 +379,11 @@ + GtkDirectionType direction) + { + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_Tab, GDK_CONTROL_MASK | modifiers, ++ GDK_KEY_Tab, GDK_MOD1_MASK | modifiers, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + gtk_binding_entry_add_signal (binding_set, +- GDK_KEY_KP_Tab, GDK_CONTROL_MASK | modifiers, ++ GDK_KEY_KP_Tab, GDK_MOD1_MASK | modifiers, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + } +diff -urN '--exclude=.git' a/gtk/gtktreeview.c b/gtk/gtktreeview.c +--- a/gtk/gtktreeview.c 2025-06-09 19:54:59.081430338 -0700 ++++ b/gtk/gtktreeview.c 2025-06-09 20:06:00.239830520 -0700 +@@ -1609,10 +1609,10 @@ + gtk_tree_view_add_move_binding (binding_set, GDK_KEY_KP_Down, 0, TRUE, + GTK_MOVEMENT_DISPLAY_LINES, 1); + +- gtk_tree_view_add_move_binding (binding_set, GDK_KEY_p, GDK_CONTROL_MASK, FALSE, ++ gtk_tree_view_add_move_binding (binding_set, GDK_KEY_p, GDK_SUPER_MASK, FALSE, + GTK_MOVEMENT_DISPLAY_LINES, -1); + +- gtk_tree_view_add_move_binding (binding_set, GDK_KEY_n, GDK_CONTROL_MASK, FALSE, ++ gtk_tree_view_add_move_binding (binding_set, GDK_KEY_n, GDK_SUPER_MASK, FALSE, + GTK_MOVEMENT_DISPLAY_LINES, 1); + + gtk_tree_view_add_move_binding (binding_set, GDK_KEY_Home, 0, TRUE, +@@ -1652,34 +1652,34 @@ + G_TYPE_ENUM, GTK_MOVEMENT_VISUAL_POSITIONS, + G_TYPE_INT, -1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, + "move-cursor", 2, + G_TYPE_ENUM, GTK_MOVEMENT_VISUAL_POSITIONS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, + "move-cursor", 2, + G_TYPE_ENUM, GTK_MOVEMENT_VISUAL_POSITIONS, + G_TYPE_INT, -1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Right, GDK_SUPER_MASK, + "move-cursor", 2, + G_TYPE_ENUM, GTK_MOVEMENT_VISUAL_POSITIONS, + G_TYPE_INT, 1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Left, GDK_SUPER_MASK, + "move-cursor", 2, + G_TYPE_ENUM, GTK_MOVEMENT_VISUAL_POSITIONS, + G_TYPE_INT, -1); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_CONTROL_MASK, "toggle-cursor-row", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_CONTROL_MASK, "toggle-cursor-row", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_SUPER_MASK, "toggle-cursor-row", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_SUPER_MASK, "toggle-cursor-row", 0); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, "select-all", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, "select-all", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, "select-all", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, "select-all", 0); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_A, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "unselect-all", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK, "unselect-all", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_A, GDK_SUPER_MASK | GDK_SHIFT_MASK, "unselect-all", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_SUPER_MASK, "unselect-all", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_SHIFT_MASK, "select-cursor-row", 1, + G_TYPE_BOOLEAN, TRUE); +@@ -1753,13 +1753,13 @@ + G_TYPE_BOOLEAN, TRUE, + G_TYPE_BOOLEAN, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Right, +- GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ GDK_SUPER_MASK | GDK_SHIFT_MASK, + "expand-collapse-cursor-row", 3, + G_TYPE_BOOLEAN, FALSE, + G_TYPE_BOOLEAN, TRUE, + G_TYPE_BOOLEAN, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Right, +- GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ GDK_SUPER_MASK | GDK_SHIFT_MASK, + "expand-collapse-cursor-row", 3, + G_TYPE_BOOLEAN, FALSE, + G_TYPE_BOOLEAN, TRUE, +@@ -1792,24 +1792,24 @@ + G_TYPE_BOOLEAN, FALSE, + G_TYPE_BOOLEAN, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Left, +- GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ GDK_SUPER_MASK | GDK_SHIFT_MASK, + "expand-collapse-cursor-row", 3, + G_TYPE_BOOLEAN, FALSE, + G_TYPE_BOOLEAN, FALSE, + G_TYPE_BOOLEAN, TRUE); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Left, +- GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ GDK_SUPER_MASK | GDK_SHIFT_MASK, + "expand-collapse-cursor-row", 3, + G_TYPE_BOOLEAN, FALSE, + G_TYPE_BOOLEAN, FALSE, + G_TYPE_BOOLEAN, TRUE); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0, "select-cursor-parent", 0); +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_CONTROL_MASK, "select-cursor-parent", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SUPER_MASK, "select-cursor-parent", 0); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_f, GDK_CONTROL_MASK, "start-interactive-search", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_f, GDK_SUPER_MASK, "start-interactive-search", 0); + +- gtk_binding_entry_add_signal (binding_set, GDK_KEY_F, GDK_CONTROL_MASK, "start-interactive-search", 0); ++ gtk_binding_entry_add_signal (binding_set, GDK_KEY_F, GDK_SUPER_MASK, "start-interactive-search", 0); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TREE_VIEW_ACCESSIBLE); + gtk_widget_class_set_css_name (widget_class, "treeview"); +@@ -9886,15 +9886,15 @@ + G_TYPE_ENUM, step, + G_TYPE_INT, count); + +- if ((modmask & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) ++ if ((modmask & GDK_SUPER_MASK) == GDK_SUPER_MASK) + return; + +- gtk_binding_entry_add_signal (binding_set, keyval, GDK_CONTROL_MASK | GDK_SHIFT_MASK, ++ gtk_binding_entry_add_signal (binding_set, keyval, GDK_SUPER_MASK | GDK_SHIFT_MASK, + "move-cursor", 2, + G_TYPE_ENUM, step, + G_TYPE_INT, count); + +- gtk_binding_entry_add_signal (binding_set, keyval, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, keyval, GDK_SUPER_MASK, + "move-cursor", 2, + G_TYPE_ENUM, step, + G_TYPE_INT, count); +diff -urN '--exclude=.git' a/gtk/gtkwindow.c b/gtk/gtkwindow.c +--- a/gtk/gtkwindow.c 2025-06-09 20:05:32.343562980 -0700 ++++ b/gtk/gtkwindow.c 2025-06-09 20:06:00.239830520 -0700 +@@ -641,13 +641,13 @@ + gtk_binding_entry_add_signal (binding_set, keysym, 0, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, direction); +- gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, keysym, GDK_SUPER_MASK, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + gtk_binding_entry_add_signal (binding_set, keypad_keysym, 0, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, direction); +- gtk_binding_entry_add_signal (binding_set, keypad_keysym, GDK_CONTROL_MASK, ++ gtk_binding_entry_add_signal (binding_set, keypad_keysym, GDK_SUPER_MASK, + "move-focus", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + } +@@ -1268,9 +1268,9 @@ + add_arrow_bindings (binding_set, GDK_KEY_Right, GTK_DIR_RIGHT); + + add_tab_bindings (binding_set, 0, GTK_DIR_TAB_FORWARD); +- add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); ++ add_tab_bindings (binding_set, GDK_MOD1_MASK, GTK_DIR_TAB_FORWARD); + add_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); +- add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); ++ add_tab_bindings (binding_set, GDK_MOD1_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_WINDOW_ACCESSIBLE); + gtk_widget_class_set_css_name (widget_class, "window"); diff --git a/debian/patches/gtk3_3002-symbolic-accellabel.patch b/debian/patches/302_symbolic-accellabel.patch similarity index 100% rename from debian/patches/gtk3_3002-symbolic-accellabel.patch rename to debian/patches/302_symbolic-accellabel.patch diff --git a/debian/patches/gtk3_3003-toolbar-icons-16px.patch b/debian/patches/303_toolbar-icons-16px.patch similarity index 100% rename from debian/patches/gtk3_3003-toolbar-icons-16px.patch rename to debian/patches/303_toolbar-icons-16px.patch diff --git a/debian/patches/gtk3_3004-gtkmessagedialog-style.patch b/debian/patches/304_gtkmessagedialog-style.patch similarity index 100% rename from debian/patches/gtk3_3004-gtkmessagedialog-style.patch rename to debian/patches/304_gtkmessagedialog-style.patch diff --git a/debian/patches/gtk3_3000-ja-no-mnemonics.patch b/debian/patches/gtk3_3000-ja-no-mnemonics.patch deleted file mode 100644 index 026a2f19a8..0000000000 --- a/debian/patches/gtk3_3000-ja-no-mnemonics.patch +++ /dev/null @@ -1,1497 +0,0 @@ -diff -urN a/po/ja.po b/po/ja.po ---- a/po/ja.po 2021-06-15 13:58:25.000000000 -0700 -+++ b/po/ja.po 2021-09-22 22:55:03.255676071 -0700 -@@ -657,32 +657,32 @@ - #: gtk/a11y/gtkimageaccessible.c:53 gtk/deprecated/gtkstock.c:345 - msgctxt "Stock label" - msgid "_About" --msgstr "このアプリケーションについて(_A)" -+msgstr "このアプリケーションについて" - - #: gtk/a11y/gtkimageaccessible.c:54 gtk/deprecated/gtkstock.c:346 - msgctxt "Stock label" - msgid "_Add" --msgstr "追加(_A)" -+msgstr "追加" - - #: gtk/a11y/gtkimageaccessible.c:55 gtk/deprecated/gtkstock.c:348 - msgctxt "Stock label" - msgid "_Bold" --msgstr "太字(_B)" -+msgstr "太字" - - #: gtk/a11y/gtkimageaccessible.c:56 gtk/deprecated/gtkstock.c:350 - msgctxt "Stock label" - msgid "_CD-ROM" --msgstr "CD-ROM(_C)" -+msgstr "CD-ROM" - - #: gtk/a11y/gtkimageaccessible.c:57 gtk/deprecated/gtkstock.c:351 - msgctxt "Stock label" - msgid "_Clear" --msgstr "クリア(_C)" -+msgstr "クリア" - - #: gtk/a11y/gtkimageaccessible.c:58 gtk/deprecated/gtkstock.c:352 - msgctxt "Stock label" - msgid "_Close" --msgstr "閉じる(_C)" -+msgstr "閉じる" - - #: gtk/a11y/gtkimageaccessible.c:59 gtk/gtkheaderbar.c:415 gtk/gtkwindow.c:9319 - msgid "Minimize" -@@ -699,17 +699,17 @@ - #: gtk/a11y/gtkimageaccessible.c:62 gtk/deprecated/gtkstock.c:355 - msgctxt "Stock label" - msgid "_Copy" --msgstr "コピー(_C)" -+msgstr "コピー" - - #: gtk/a11y/gtkimageaccessible.c:63 gtk/deprecated/gtkstock.c:356 - msgctxt "Stock label" - msgid "Cu_t" --msgstr "切り取り(_T)" -+msgstr "切り取り" - - #: gtk/a11y/gtkimageaccessible.c:64 gtk/deprecated/gtkstock.c:357 - msgctxt "Stock label" - msgid "_Delete" --msgstr "削除(_D)" -+msgstr "削除" - - #: gtk/a11y/gtkimageaccessible.c:65 gtk/deprecated/gtkstock.c:339 - msgctxt "Stock label" -@@ -735,95 +735,95 @@ - #: gtk/a11y/gtkimageaccessible.c:69 gtk/deprecated/gtkstock.c:360 - msgctxt "Stock label" - msgid "_Execute" --msgstr "実行(_E)" -+msgstr "実行" - - #: gtk/a11y/gtkimageaccessible.c:70 gtk/deprecated/gtkstock.c:362 - msgctxt "Stock label" - msgid "_File" --msgstr "ファイル(_F)" -+msgstr "ファイル" - - #: gtk/a11y/gtkimageaccessible.c:71 gtk/deprecated/gtkstock.c:363 - msgctxt "Stock label" - msgid "_Find" --msgstr "検索(_F)" -+msgstr "検索" - - #: gtk/a11y/gtkimageaccessible.c:72 gtk/deprecated/gtkstock.c:364 - msgctxt "Stock label" - msgid "Find and _Replace" --msgstr "検索して置換(_R)" -+msgstr "検索して置換" - - #: gtk/a11y/gtkimageaccessible.c:73 gtk/deprecated/gtkstock.c:365 - msgctxt "Stock label" - msgid "_Floppy" --msgstr "フロッピー(_F)" -+msgstr "フロッピー" - - #: gtk/a11y/gtkimageaccessible.c:74 gtk/deprecated/gtkstock.c:366 - msgctxt "Stock label" - msgid "_Fullscreen" --msgstr "フルスクリーン(_F)" -+msgstr "フルスクリーン" - - #. This is a navigation label as in "go to the bottom of the page" - #: gtk/a11y/gtkimageaccessible.c:75 gtk/deprecated/gtkstock.c:369 - msgctxt "Stock label, navigation" - msgid "_Bottom" --msgstr "最後(_B)" -+msgstr "最後" - - #. This is a navigation label as in "go to the first page" - #: gtk/a11y/gtkimageaccessible.c:76 gtk/deprecated/gtkstock.c:371 - msgctxt "Stock label, navigation" - msgid "_First" --msgstr "先頭(_F)" -+msgstr "先頭" - - #. This is a navigation label as in "go to the last page" - #: gtk/a11y/gtkimageaccessible.c:77 gtk/deprecated/gtkstock.c:373 - msgctxt "Stock label, navigation" - msgid "_Last" --msgstr "最後(_L)" -+msgstr "最後" - - #. This is a navigation label as in "go to the top of the page" - #: gtk/a11y/gtkimageaccessible.c:78 gtk/deprecated/gtkstock.c:375 - msgctxt "Stock label, navigation" - msgid "_Top" --msgstr "先頭(_T)" -+msgstr "先頭" - - #. This is a navigation label as in "go back" - #: gtk/a11y/gtkimageaccessible.c:79 gtk/deprecated/gtkstock.c:377 - msgctxt "Stock label, navigation" - msgid "_Back" --msgstr "戻る(_B)" -+msgstr "戻る" - - #. This is a navigation label as in "go down" - #: gtk/a11y/gtkimageaccessible.c:80 gtk/deprecated/gtkstock.c:379 - msgctxt "Stock label, navigation" - msgid "_Down" --msgstr "下へ(_D)" -+msgstr "下へ" - - #. This is a navigation label as in "go forward" - #: gtk/a11y/gtkimageaccessible.c:81 gtk/deprecated/gtkstock.c:381 - msgctxt "Stock label, navigation" - msgid "_Forward" --msgstr "進む(_F)" -+msgstr "進む" - - #. This is a navigation label as in "go up" - #: gtk/a11y/gtkimageaccessible.c:82 gtk/deprecated/gtkstock.c:383 - msgctxt "Stock label, navigation" - msgid "_Up" --msgstr "上へ(_U)" -+msgstr "上へ" - - #: gtk/a11y/gtkimageaccessible.c:83 gtk/deprecated/gtkstock.c:384 - msgctxt "Stock label" - msgid "_Hard Disk" --msgstr "ハードディスク(_H)" -+msgstr "ハードディスク" - - #: gtk/a11y/gtkimageaccessible.c:84 gtk/deprecated/gtkstock.c:385 - msgctxt "Stock label" - msgid "_Help" --msgstr "ヘルプ(_H)" -+msgstr "ヘルプ" - - #: gtk/a11y/gtkimageaccessible.c:85 gtk/deprecated/gtkstock.c:386 - msgctxt "Stock label" - msgid "_Home" --msgstr "ホーム(_H)" -+msgstr "ホーム" - - #: gtk/a11y/gtkimageaccessible.c:86 gtk/deprecated/gtkstock.c:387 - msgctxt "Stock label" -@@ -833,203 +833,203 @@ - #: gtk/a11y/gtkimageaccessible.c:87 gtk/deprecated/gtkstock.c:391 - msgctxt "Stock label" - msgid "_Italic" --msgstr "斜体(_I)" -+msgstr "斜体" - - #: gtk/a11y/gtkimageaccessible.c:88 gtk/deprecated/gtkstock.c:392 - msgctxt "Stock label" - msgid "_Jump to" --msgstr "移動(_J)" -+msgstr "移動" - - #. This is about text justification, "centered text" - #: gtk/a11y/gtkimageaccessible.c:89 gtk/deprecated/gtkstock.c:394 - msgctxt "Stock label" - msgid "_Center" --msgstr "中央寄せ(_C)" -+msgstr "中央寄せ" - - #. This is about text justification - #: gtk/a11y/gtkimageaccessible.c:90 gtk/deprecated/gtkstock.c:396 - msgctxt "Stock label" - msgid "_Fill" --msgstr "埋める(_F)" -+msgstr "埋める" - - #. This is about text justification, "left-justified text" - #: gtk/a11y/gtkimageaccessible.c:91 gtk/deprecated/gtkstock.c:398 - msgctxt "Stock label" - msgid "_Left" --msgstr "左寄せ(_L)" -+msgstr "左寄せ" - - #. This is about text justification, "right-justified text" - #: gtk/a11y/gtkimageaccessible.c:92 gtk/deprecated/gtkstock.c:400 - msgctxt "Stock label" - msgid "_Right" --msgstr "右寄せ(_R)" -+msgstr "右寄せ" - - #: gtk/a11y/gtkimageaccessible.c:93 gtk/deprecated/gtkstock.c:367 - msgctxt "Stock label" - msgid "_Leave Fullscreen" --msgstr "フルスクリーンの解除(_L)" -+msgstr "フルスクリーンの解除" - - #. Media label, as in "fast forward" - #: gtk/a11y/gtkimageaccessible.c:94 gtk/deprecated/gtkstock.c:403 - msgctxt "Stock label, media" - msgid "_Forward" --msgstr "早送り(_F)" -+msgstr "早送り" - - #. Media label, as in "next song" - #: gtk/a11y/gtkimageaccessible.c:95 gtk/deprecated/gtkstock.c:405 - msgctxt "Stock label, media" - msgid "_Next" --msgstr "次(_N)" -+msgstr "次" - - #. Media label, as in "pause music" - #: gtk/a11y/gtkimageaccessible.c:96 gtk/deprecated/gtkstock.c:407 - msgctxt "Stock label, media" - msgid "P_ause" --msgstr "一時停止(_A)" -+msgstr "一時停止" - - #. Media label, as in "play music" - #: gtk/a11y/gtkimageaccessible.c:97 gtk/deprecated/gtkstock.c:409 - msgctxt "Stock label, media" - msgid "_Play" --msgstr "再生(_P)" -+msgstr "再生" - - #. Media label, as in "previous song" - #: gtk/a11y/gtkimageaccessible.c:98 gtk/deprecated/gtkstock.c:411 - msgctxt "Stock label, media" - msgid "Pre_vious" --msgstr "前(_V)" -+msgstr "前" - - #. Media label - #: gtk/a11y/gtkimageaccessible.c:99 gtk/deprecated/gtkstock.c:413 - msgctxt "Stock label, media" - msgid "_Record" --msgstr "録音(_R)" -+msgstr "録音" - - #. Media label - #: gtk/a11y/gtkimageaccessible.c:100 gtk/deprecated/gtkstock.c:415 - msgctxt "Stock label, media" - msgid "R_ewind" --msgstr "巻き戻し(_E)" -+msgstr "巻き戻し" - - #. Media label - #: gtk/a11y/gtkimageaccessible.c:101 gtk/deprecated/gtkstock.c:417 - msgctxt "Stock label, media" - msgid "_Stop" --msgstr "停止(_S)" -+msgstr "停止" - - #: gtk/a11y/gtkimageaccessible.c:102 gtk/deprecated/gtkstock.c:418 - msgctxt "Stock label" - msgid "_Network" --msgstr "ネットワーク(_N)" -+msgstr "ネットワーク" - - #: gtk/a11y/gtkimageaccessible.c:103 gtk/deprecated/gtkstock.c:419 - msgctxt "Stock label" - msgid "_New" --msgstr "新規(_N)" -+msgstr "新規" - - #: gtk/a11y/gtkimageaccessible.c:104 gtk/deprecated/gtkstock.c:422 - msgctxt "Stock label" - msgid "_Open" --msgstr "開く(_O)" -+msgstr "開く" - - #: gtk/a11y/gtkimageaccessible.c:105 gtk/deprecated/gtkstock.c:432 - msgctxt "Stock label" - msgid "_Paste" --msgstr "貼り付け(_P)" -+msgstr "貼り付け" - - #: gtk/a11y/gtkimageaccessible.c:106 gtk/deprecated/gtkstock.c:434 - msgctxt "Stock label" - msgid "_Print" --msgstr "印刷(_P)" -+msgstr "印刷" - - #: gtk/a11y/gtkimageaccessible.c:107 gtk/deprecated/gtkstock.c:435 - msgctxt "Stock label" - msgid "Print Pre_view" --msgstr "印刷プレビュー(_V)" -+msgstr "印刷プレビュー" - - #: gtk/a11y/gtkimageaccessible.c:108 gtk/deprecated/gtkstock.c:436 - msgctxt "Stock label" - msgid "_Properties" --msgstr "プロパティ(_P)" -+msgstr "プロパティ" - - #: gtk/a11y/gtkimageaccessible.c:109 gtk/deprecated/gtkstock.c:437 - msgctxt "Stock label" - msgid "_Quit" --msgstr "終了(_Q)" -+msgstr "終了" - - #: gtk/a11y/gtkimageaccessible.c:110 gtk/deprecated/gtkstock.c:438 - msgctxt "Stock label" - msgid "_Redo" --msgstr "やり直す(_R)" -+msgstr "やり直す" - - #: gtk/a11y/gtkimageaccessible.c:111 gtk/deprecated/gtkstock.c:439 - msgctxt "Stock label" - msgid "_Refresh" --msgstr "更新(_R)" -+msgstr "更新" - - #: gtk/a11y/gtkimageaccessible.c:112 gtk/deprecated/gtkstock.c:440 - msgctxt "Stock label" - msgid "_Remove" --msgstr "削除(_R)" -+msgstr "削除" - - #: gtk/a11y/gtkimageaccessible.c:113 gtk/deprecated/gtkstock.c:441 - msgctxt "Stock label" - msgid "_Revert" --msgstr "元に戻す(_R)" -+msgstr "元に戻す" - - #: gtk/a11y/gtkimageaccessible.c:114 gtk/deprecated/gtkstock.c:442 - msgctxt "Stock label" - msgid "_Save" --msgstr "保存(_S)" -+msgstr "保存" - - #: gtk/a11y/gtkimageaccessible.c:115 gtk/deprecated/gtkstock.c:443 - msgctxt "Stock label" - msgid "Save _As" --msgstr "名前を付けて保存(_A)" -+msgstr "名前を付けて保存" - - #: gtk/a11y/gtkimageaccessible.c:116 gtk/deprecated/gtkstock.c:444 - msgctxt "Stock label" - msgid "Select _All" --msgstr "すべて選択(_A)" -+msgstr "すべて選択" - - #. Sorting direction - #: gtk/a11y/gtkimageaccessible.c:117 gtk/deprecated/gtkstock.c:448 - msgctxt "Stock label" - msgid "_Ascending" --msgstr "昇順(_A)" -+msgstr "昇順" - - #. Sorting direction - #: gtk/a11y/gtkimageaccessible.c:118 gtk/deprecated/gtkstock.c:450 - msgctxt "Stock label" - msgid "_Descending" --msgstr "降順(_D)" -+msgstr "降順" - - #: gtk/a11y/gtkimageaccessible.c:119 gtk/deprecated/gtkstock.c:451 - msgctxt "Stock label" - msgid "_Spell Check" --msgstr "スペルチェック(_S)" -+msgstr "スペルチェック" - - #: gtk/a11y/gtkimageaccessible.c:120 gtk/deprecated/gtkstock.c:452 - msgctxt "Stock label" - msgid "_Stop" --msgstr "停止(_S)" -+msgstr "停止" - - #. Font variant - #: gtk/a11y/gtkimageaccessible.c:121 gtk/deprecated/gtkstock.c:454 - msgctxt "Stock label" - msgid "_Strikethrough" --msgstr "打ち消し線(_S)" -+msgstr "打ち消し線" - - #. Font variant - #: gtk/a11y/gtkimageaccessible.c:122 gtk/deprecated/gtkstock.c:457 - msgctxt "Stock label" - msgid "_Underline" --msgstr "下線(_U)" -+msgstr "下線" - - #: gtk/a11y/gtkimageaccessible.c:123 gtk/deprecated/gtkstock.c:458 - msgctxt "Stock label" - msgid "_Undo" --msgstr "元に戻す(_U)" -+msgstr "元に戻す" - - #: gtk/a11y/gtkimageaccessible.c:124 gtk/deprecated/gtkstock.c:388 - msgctxt "Stock label" -@@ -1040,23 +1040,23 @@ - #: gtk/a11y/gtkimageaccessible.c:125 gtk/deprecated/gtkstock.c:461 - msgctxt "Stock label" - msgid "_Normal Size" --msgstr "標準サイズ(_N)" -+msgstr "標準サイズ" - - #. Zoom - #: gtk/a11y/gtkimageaccessible.c:126 gtk/deprecated/gtkstock.c:463 - msgctxt "Stock label" - msgid "Best _Fit" --msgstr "フィットさせる(_F)" -+msgstr "フィットさせる" - - #: gtk/a11y/gtkimageaccessible.c:127 gtk/deprecated/gtkstock.c:464 - msgctxt "Stock label" - msgid "Zoom _In" --msgstr "拡大(_I)" -+msgstr "拡大" - - #: gtk/a11y/gtkimageaccessible.c:128 gtk/deprecated/gtkstock.c:465 - msgctxt "Stock label" - msgid "Zoom _Out" --msgstr "縮小(_O)" -+msgstr "縮小" - - #: gtk/a11y/gtkmenubuttonaccessible.c:102 gtk/inspector/window.ui:459 - msgid "Menu" -@@ -1118,7 +1118,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:461 - msgid "_Hue:" --msgstr "色相(_H):" -+msgstr "色相:" - - #: gtk/deprecated/gtkcolorsel.c:462 - msgid "Position on the color wheel." -@@ -1126,7 +1126,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:464 - msgid "S_aturation:" --msgstr "彩度(_A):" -+msgstr "彩度:" - - #: gtk/deprecated/gtkcolorsel.c:465 - msgid "Intensity of the color." -@@ -1134,7 +1134,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:466 - msgid "_Value:" --msgstr "明度(_V):" -+msgstr "明度:" - - #: gtk/deprecated/gtkcolorsel.c:467 - msgid "Brightness of the color." -@@ -1142,7 +1142,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:468 - msgid "_Red:" --msgstr "赤(_R):" -+msgstr "赤:" - - #: gtk/deprecated/gtkcolorsel.c:469 - msgid "Amount of red light in the color." -@@ -1150,7 +1150,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:470 - msgid "_Green:" --msgstr "緑(_G):" -+msgstr "緑:" - - #: gtk/deprecated/gtkcolorsel.c:471 - msgid "Amount of green light in the color." -@@ -1158,7 +1158,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:472 - msgid "_Blue:" --msgstr "青(_B):" -+msgstr "青:" - - #: gtk/deprecated/gtkcolorsel.c:473 - msgid "Amount of blue light in the color." -@@ -1166,7 +1166,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:476 - msgid "Op_acity:" --msgstr "不透明度(_A):" -+msgstr "不透明度:" - - #: gtk/deprecated/gtkcolorsel.c:484 gtk/deprecated/gtkcolorsel.c:494 - msgid "Transparency of the color." -@@ -1174,7 +1174,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:501 - msgid "Color _name:" --msgstr "色の名称(_N):" -+msgstr "色の名称:" - - #: gtk/deprecated/gtkcolorsel.c:516 - msgid "" -@@ -1186,7 +1186,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:548 - msgid "_Palette:" --msgstr "パレット(_P):" -+msgstr "パレット:" - - #: gtk/deprecated/gtkcolorsel.c:578 - msgid "Color Wheel" -@@ -1222,7 +1222,7 @@ - - #: gtk/deprecated/gtkcolorsel.c:1458 - msgid "_Save color here" --msgstr "ここに色を保存する(_S)" -+msgstr "ここに色を保存する" - - #: gtk/deprecated/gtkcolorsel.c:1664 - msgid "" -@@ -1244,17 +1244,17 @@ - #: gtk/ui/gtkappchooserdialog.ui:61 gtk/ui/gtkassistant.ui:125 - #: gtk/ui/gtkcolorchooserdialog.ui:34 gtk/ui/gtkfontchooserdialog.ui:31 - msgid "_Cancel" --msgstr "キャンセル(_C)" -+msgstr "キャンセル" - - #: gtk/deprecated/gtkcolorseldialog.c:195 gtk/gtkprinteroptionwidget.c:546 - #: gtk/ui/gtkappchooserdialog.ui:67 gtk/ui/gtkcolorchooserdialog.ui:40 - #: gtk/ui/gtkfontchooserdialog.ui:37 - msgid "_Select" --msgstr "選択(_S)" -+msgstr "選択" - - #: gtk/deprecated/gtkcolorseldialog.c:201 - msgid "_Help" --msgstr "ヘルプ(_H)" -+msgstr "ヘルプ" - - #: gtk/deprecated/gtkcolorseldialog.c:213 - msgid "Color Selection" -@@ -1268,30 +1268,30 @@ - - #: gtk/deprecated/gtkfontsel.c:386 - msgid "_Family:" --msgstr "ファミリ(_F):" -+msgstr "ファミリ:" - - #: gtk/deprecated/gtkfontsel.c:393 - msgid "_Style:" --msgstr "スタイル(_S):" -+msgstr "スタイル:" - - #: gtk/deprecated/gtkfontsel.c:400 - msgid "Si_ze:" --msgstr "サイズ(_Z):" -+msgstr "サイズ:" - - #. create the text entry widget - #: gtk/deprecated/gtkfontsel.c:577 - msgid "_Preview:" --msgstr "プレビュー(_P):" -+msgstr "プレビュー:" - - #: gtk/deprecated/gtkfontsel.c:1693 gtk/gtkpagesetupunixdialog.c:198 - #: gtk/ui/gtkassistant.ui:50 - msgid "_Apply" --msgstr "適用(_A)" -+msgstr "適用" - - #: gtk/deprecated/gtkfontsel.c:1698 gtk/gtkmessagedialog.c:944 - #: gtk/gtkmessagedialog.c:966 gtk/gtkprintbackend.c:780 gtk/gtkwindow.c:12790 - msgid "_OK" --msgstr "OK(_O)" -+msgstr "OK" - - #: gtk/deprecated/gtkfontsel.c:1709 - msgid "Font Selection" -@@ -1309,57 +1309,57 @@ - #: gtk/deprecated/gtkstock.c:347 - msgctxt "Stock label" - msgid "_Apply" --msgstr "適用(_A)" -+msgstr "適用" - - #: gtk/deprecated/gtkstock.c:349 - msgctxt "Stock label" - msgid "_Cancel" --msgstr "キャンセル(_C)" -+msgstr "キャンセル" - - #: gtk/deprecated/gtkstock.c:353 - msgctxt "Stock label" - msgid "C_onnect" --msgstr "接続(_O)" -+msgstr "接続" - - #: gtk/deprecated/gtkstock.c:354 - msgctxt "Stock label" - msgid "_Convert" --msgstr "変換(_C)" -+msgstr "変換" - - #: gtk/deprecated/gtkstock.c:358 - msgctxt "Stock label" - msgid "_Discard" --msgstr "無効(_D)" -+msgstr "無効" - - #: gtk/deprecated/gtkstock.c:359 - msgctxt "Stock label" - msgid "_Disconnect" --msgstr "切断(_D)" -+msgstr "切断" - - #: gtk/deprecated/gtkstock.c:361 - msgctxt "Stock label" - msgid "_Edit" --msgstr "編集(_E)" -+msgstr "編集" - - #: gtk/deprecated/gtkstock.c:389 - msgctxt "Stock label" - msgid "_Index" --msgstr "インデックス(_I)" -+msgstr "インデックス" - - #: gtk/deprecated/gtkstock.c:390 - msgctxt "Stock label" - msgid "_Information" --msgstr "情報(_I)" -+msgstr "情報" - - #: gtk/deprecated/gtkstock.c:420 - msgctxt "Stock label" - msgid "_No" --msgstr "いいえ(_N)" -+msgstr "いいえ" - - #: gtk/deprecated/gtkstock.c:421 - msgctxt "Stock label" - msgid "_OK" --msgstr "OK(_O)" -+msgstr "OK" - - #. Page orientation - #: gtk/deprecated/gtkstock.c:424 -@@ -1388,32 +1388,32 @@ - #: gtk/deprecated/gtkstock.c:431 - msgctxt "Stock label" - msgid "Page Set_up" --msgstr "ページの設定(_U)" -+msgstr "ページの設定" - - #: gtk/deprecated/gtkstock.c:433 - msgctxt "Stock label" - msgid "_Preferences" --msgstr "設定(_P)" -+msgstr "設定" - - #: gtk/deprecated/gtkstock.c:445 - msgctxt "Stock label" - msgid "_Color" --msgstr "色(_C)" -+msgstr "色" - - #: gtk/deprecated/gtkstock.c:446 - msgctxt "Stock label" - msgid "_Font" --msgstr "フォント(_F)" -+msgstr "フォント" - - #: gtk/deprecated/gtkstock.c:455 - msgctxt "Stock label" - msgid "_Undelete" --msgstr "削除の取り消し(_U)" -+msgstr "削除の取り消し" - - #: gtk/deprecated/gtkstock.c:459 - msgctxt "Stock label" - msgid "_Yes" --msgstr "はい(_Y)" -+msgstr "はい" - - #: gtk/deprecated/gtkuimanager.c:1782 - #, c-format -@@ -1527,16 +1527,16 @@ - - #: gtk/gtkaboutdialog.c:703 - msgid "C_redits" --msgstr "クレジット(_R)" -+msgstr "クレジット" - - #: gtk/gtkaboutdialog.c:711 - msgid "_License" --msgstr "ライセンス(_L)" -+msgstr "ライセンス" - - #: gtk/gtkaboutdialog.c:720 gtk/gtkcustompaperunixdialog.c:329 - #: gtk/gtkmessagedialog.c:948 gtk/ui/gtkassistant.ui:144 - msgid "_Close" --msgstr "閉じる(_C)" -+msgstr "閉じる" - - #: gtk/gtkaboutdialog.c:1004 - msgid "Could not show link" -@@ -2197,7 +2197,7 @@ - - #: gtk/gtkcolorswatch.c:360 - msgid "C_ustomize" --msgstr "カスタマイズ(_U)" -+msgstr "カスタマイズ" - - #. Translate to the default units to use for presenting - #. * lengths to the user. Translate to default:inch if you -@@ -2233,11 +2233,11 @@ - - #: gtk/gtkcustompaperunixdialog.c:1120 - msgid "_Width:" --msgstr "幅(_W):" -+msgstr "幅:" - - #: gtk/gtkcustompaperunixdialog.c:1131 - msgid "_Height:" --msgstr "高さ(_H):" -+msgstr "高さ:" - - #: gtk/gtkcustompaperunixdialog.c:1142 - msgid "Paper Size" -@@ -2245,19 +2245,19 @@ - - #: gtk/gtkcustompaperunixdialog.c:1151 - msgid "_Top:" --msgstr "上側(_T):" -+msgstr "上側:" - - #: gtk/gtkcustompaperunixdialog.c:1162 - msgid "_Bottom:" --msgstr "下側(_B):" -+msgstr "下側:" - - #: gtk/gtkcustompaperunixdialog.c:1173 - msgid "_Left:" --msgstr "左側(_L):" -+msgstr "左側:" - - #: gtk/gtkcustompaperunixdialog.c:1184 - msgid "_Right:" --msgstr "右側(_R):" -+msgstr "右側:" - - #: gtk/gtkcustompaperunixdialog.c:1223 - msgid "Paper Margins" -@@ -2265,28 +2265,28 @@ - - #: gtk/gtkentry.c:9591 gtk/gtklabel.c:6680 gtk/gtktextview.c:9520 - msgid "Cu_t" --msgstr "切り取り(_T)" -+msgstr "切り取り" - - #: gtk/gtkentry.c:9595 gtk/gtklabel.c:6681 gtk/gtktextview.c:9524 - msgid "_Copy" --msgstr "コピー(_C)" -+msgstr "コピー" - - #: gtk/gtkentry.c:9599 gtk/gtklabel.c:6682 gtk/gtktextview.c:9526 - msgid "_Paste" --msgstr "貼り付け(_P)" -+msgstr "貼り付け" - - #: gtk/gtkentry.c:9602 gtk/gtkfilechooserwidget.c:1499 - #: gtk/gtkfilechooserwidget.c:2334 gtk/gtklabel.c:6684 gtk/gtktextview.c:9529 - msgid "_Delete" --msgstr "削除(_D)" -+msgstr "削除" - - #: gtk/gtkentry.c:9613 gtk/gtklabel.c:6693 gtk/gtktextview.c:9543 - msgid "Select _All" --msgstr "すべて選択(_A)" -+msgstr "すべて選択" - - #: gtk/gtkentry.c:9623 gtk/gtktextview.c:9553 - msgid "Insert _Emoji" --msgstr "絵文字を挿入(_E)" -+msgstr "絵文字を挿入" - - #: gtk/gtkentry.c:9799 gtk/gtktextview.c:9777 - msgid "Select all" -@@ -2330,18 +2330,18 @@ - - #: gtk/gtkfilechooserdialog.c:542 - msgid "_Name" --msgstr "名前(_N)" -+msgstr "名前" - - #. Open item is always present - #: gtk/gtkfilechoosernative.c:546 gtk/gtkfilechoosernative.c:631 - #: gtk/gtkplacessidebar.c:3625 gtk/gtkplacessidebar.c:3693 - #: gtk/gtkplacesview.c:1696 - msgid "_Open" --msgstr "開く(_O)" -+msgstr "開く" - - #: gtk/gtkfilechoosernative.c:631 gtk/inspector/css-editor.c:202 - msgid "_Save" --msgstr "保存(_S)" -+msgstr "保存" - - #: gtk/gtkfilechoosernativequartz.c:331 gtk/ui/gtkfilechooserwidget.ui:405 - msgid "Select which types of files are shown" -@@ -2496,48 +2496,48 @@ - - #: gtk/gtkfilechooserwidget.c:2329 - msgid "_Visit File" --msgstr "ファイルの場所に移動する(_V)" -+msgstr "ファイルの場所に移動する" - - #: gtk/gtkfilechooserwidget.c:2330 - msgid "_Open With File Manager" --msgstr "ファイルマネージャーで開く(_O)" -+msgstr "ファイルマネージャーで開く" - - #: gtk/gtkfilechooserwidget.c:2331 - msgid "_Copy Location" --msgstr "場所のコピー(_C)" -+msgstr "場所のコピー" - - #: gtk/gtkfilechooserwidget.c:2332 - msgid "_Add to Bookmarks" --msgstr "ブックマークへ追加(_A)" -+msgstr "ブックマークへ追加" - - #: gtk/gtkfilechooserwidget.c:2333 gtk/gtkplacessidebar.c:2741 - #: gtk/ui/gtkfilechooserwidget.ui:539 - msgid "_Rename" --msgstr "名前の変更(_R)" -+msgstr "名前の変更" - - #: gtk/gtkfilechooserwidget.c:2335 - msgid "_Move to Trash" --msgstr "ゴミ箱へ移動する(_M)" -+msgstr "ゴミ箱へ移動する" - - #: gtk/gtkfilechooserwidget.c:2339 - msgid "Show _Hidden Files" --msgstr "隠しファイルを表示する(_H)" -+msgstr "隠しファイルを表示する" - - #: gtk/gtkfilechooserwidget.c:2340 - msgid "Show _Size Column" --msgstr "サイズを表示する(_S)" -+msgstr "サイズを表示する" - - #: gtk/gtkfilechooserwidget.c:2341 - msgid "Show T_ype Column" --msgstr "種類を表示する(_Y)" -+msgstr "種類を表示する" - - #: gtk/gtkfilechooserwidget.c:2342 - msgid "Show _Time" --msgstr "時刻を表示する(_T)" -+msgstr "時刻を表示する" - - #: gtk/gtkfilechooserwidget.c:2343 - msgid "Sort _Folders before Files" --msgstr "フォルダーをファイルよりも前に配置する(_F)" -+msgstr "フォルダーをファイルよりも前に配置する" - - #. this is the header for the location column in the print dialog - #: gtk/gtkfilechooserwidget.c:2625 gtk/inspector/css-node-tree.ui:141 -@@ -2548,7 +2548,7 @@ - #. Label - #: gtk/gtkfilechooserwidget.c:2718 - msgid "_Name:" --msgstr "名前(_N):" -+msgstr "名前:" - - #: gtk/gtkfilechooserwidget.c:3343 gtk/gtkfilechooserwidget.c:3357 - #, c-format -@@ -2683,7 +2683,7 @@ - - #: gtk/gtkfilechooserwidget.c:6573 gtk/gtkprintunixdialog.c:677 - msgid "_Replace" --msgstr "置き換える(_R)" -+msgstr "置き換える" - - #: gtk/gtkfilechooserwidget.c:6792 - msgid "You do not have access to the specified folder." -@@ -2832,12 +2832,12 @@ - #. Open Link - #: gtk/gtklabel.c:6661 - msgid "_Open Link" --msgstr "リンクを開く(_O)" -+msgstr "リンクを開く" - - #. Copy Link Address - #: gtk/gtklabel.c:6670 - msgid "Copy _Link Address" --msgstr "リンクのアドレスをコピー(_L)" -+msgstr "リンクのアドレスをコピー" - - #: gtk/gtk-launch.c:42 - msgid "Show program version" -@@ -2984,15 +2984,15 @@ - - #: gtk/gtkmessagedialog.c:956 - msgid "_No" --msgstr "いいえ(_N)" -+msgstr "いいえ" - - #: gtk/gtkmessagedialog.c:957 - msgid "_Yes" --msgstr "はい(_Y)" -+msgstr "はい" - - #: gtk/gtkmountoperation.c:595 - msgid "Co_nnect" --msgstr "接続する(_N)" -+msgstr "接続する" - - #: gtk/gtkmountoperation.c:668 - msgid "Connect As" -@@ -3000,19 +3000,19 @@ - - #: gtk/gtkmountoperation.c:677 - msgid "_Anonymous" --msgstr "匿名(_A)" -+msgstr "匿名" - - #: gtk/gtkmountoperation.c:686 - msgid "Registered U_ser" --msgstr "登録ユーザー(_S)" -+msgstr "登録ユーザー" - - #: gtk/gtkmountoperation.c:697 - msgid "_Username" --msgstr "ユーザー名(_U)" -+msgstr "ユーザー名" - - #: gtk/gtkmountoperation.c:702 - msgid "_Domain" --msgstr "ドメイン(_D)" -+msgstr "ドメイン" - - #: gtk/gtkmountoperation.c:711 - msgid "Volume type" -@@ -3020,31 +3020,31 @@ - - #: gtk/gtkmountoperation.c:721 - msgid "_Hidden" --msgstr "隠しボリューム(_H)" -+msgstr "隠しボリューム" - - #: gtk/gtkmountoperation.c:724 - msgid "_Windows system" --msgstr "Windows システムボリューム(_W)" -+msgstr "Windows システムボリューム" - - #: gtk/gtkmountoperation.c:727 - msgid "_PIM" --msgstr "PIM(_P)" -+msgstr "PIM" - - #: gtk/gtkmountoperation.c:733 - msgid "_Password" --msgstr "パスワード(_P)" -+msgstr "パスワード" - - #: gtk/gtkmountoperation.c:755 - msgid "Forget password _immediately" --msgstr "今すぐパスワードを破棄する(_I)" -+msgstr "今すぐパスワードを破棄する" - - #: gtk/gtkmountoperation.c:765 - msgid "Remember password until you _logout" --msgstr "ログアウトするまでパスワードを記憶する(_L)" -+msgstr "ログアウトするまでパスワードを記憶する" - - #: gtk/gtkmountoperation.c:775 - msgid "Remember _forever" --msgstr "期限なしで記憶する(_F)" -+msgstr "期限なしで記憶する" - - #: gtk/gtkmountoperation.c:1170 - #, c-format -@@ -3058,7 +3058,7 @@ - - #: gtk/gtkmountoperation.c:1389 - msgid "_End Process" --msgstr "プロセスを終了(_E)" -+msgstr "プロセスを終了" - - #: gtk/gtkmountoperation-stub.c:62 - #, c-format -@@ -3220,45 +3220,45 @@ - #. Adjust start/stop items to reflect the type of the drive - #: gtk/gtkplacessidebar.c:2334 gtk/gtkplacessidebar.c:3713 - msgid "_Start" --msgstr "開始(_S)" -+msgstr "開始" - - #: gtk/gtkplacessidebar.c:2335 gtk/gtkplacessidebar.c:3714 - msgid "_Stop" --msgstr "停止(_S)" -+msgstr "停止" - - #. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used - #: gtk/gtkplacessidebar.c:2342 - msgid "_Power On" --msgstr "電源オン(_P)" -+msgstr "電源オン" - - #: gtk/gtkplacessidebar.c:2343 - msgid "_Safely Remove Drive" --msgstr "ドライブの安全な取り出し(_S)" -+msgstr "ドライブの安全な取り出し" - - #: gtk/gtkplacessidebar.c:2347 - msgid "_Connect Drive" --msgstr "ドライブに接続(_C)" -+msgstr "ドライブに接続" - - #: gtk/gtkplacessidebar.c:2348 - msgid "_Disconnect Drive" --msgstr "ドライブを切断(_D)" -+msgstr "ドライブを切断" - - #: gtk/gtkplacessidebar.c:2352 - msgid "_Start Multi-disk Device" --msgstr "マルチディスクデバイスを起動(_S)" -+msgstr "マルチディスクデバイスを起動" - - #: gtk/gtkplacessidebar.c:2353 - msgid "_Stop Multi-disk Device" --msgstr "マルチディスクデバイスを停止(_S)" -+msgstr "マルチディスクデバイスを停止" - - #. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used - #: gtk/gtkplacessidebar.c:2358 - msgid "_Unlock Device" --msgstr "デバイスのロック解除(_U)" -+msgstr "デバイスのロック解除" - - #: gtk/gtkplacessidebar.c:2359 - msgid "_Lock Device" --msgstr "デバイスのロック(_L)" -+msgstr "デバイスのロック" - - #: gtk/gtkplacessidebar.c:2397 gtk/gtkplacessidebar.c:3394 - #, c-format -@@ -3313,20 +3313,20 @@ - #: gtk/gtkplacessidebar.c:3630 gtk/gtkplacessidebar.c:3696 - #: gtk/gtkplacesview.c:1706 - msgid "Open in New _Tab" --msgstr "新しいタブで開く(_T)" -+msgstr "新しいタブで開く" - - #: gtk/gtkplacessidebar.c:3636 gtk/gtkplacessidebar.c:3699 - #: gtk/gtkplacesview.c:1717 - msgid "Open in New _Window" --msgstr "新しいウィンドウで開く(_W)" -+msgstr "新しいウィンドウで開く" - - #: gtk/gtkplacessidebar.c:3703 - msgid "_Add Bookmark" --msgstr "ブックマークを追加(_A)" -+msgstr "ブックマークを追加" - - #: gtk/gtkplacessidebar.c:3704 - msgid "_Remove" --msgstr "削除(_R)" -+msgstr "削除" - - #: gtk/gtkplacessidebar.c:3705 - msgid "Rename…" -@@ -3334,19 +3334,19 @@ - - #: gtk/gtkplacessidebar.c:3709 gtk/gtkplacesview.c:1751 - msgid "_Mount" --msgstr "マウント(_M)" -+msgstr "マウント" - - #: gtk/gtkplacessidebar.c:3710 gtk/gtkplacesview.c:1741 - msgid "_Unmount" --msgstr "アンマウント(_U)" -+msgstr "アンマウント" - - #: gtk/gtkplacessidebar.c:3711 - msgid "_Eject" --msgstr "取り出す(_E)" -+msgstr "取り出す" - - #: gtk/gtkplacessidebar.c:3712 - msgid "_Detect Media" --msgstr "メディアを検出(_D)" -+msgstr "メディアを検出" - - #: gtk/gtkplacessidebar.c:4158 gtk/gtkplacesview.c:1122 - msgid "Computer" -@@ -3368,7 +3368,7 @@ - #. Restore from Cancel to Connect - #: gtk/gtkplacesview.c:1250 gtk/ui/gtkplacesview.ui:317 - msgid "Con_nect" --msgstr "接続(_N)" -+msgstr "接続" - - #. if it wasn't cancelled show a dialog - #: gtk/gtkplacesview.c:1384 -@@ -3378,7 +3378,7 @@ - #. Allow to cancel the operation - #: gtk/gtkplacesview.c:1485 - msgid "Cance_l" --msgstr "キャンセル(_L)" -+msgstr "キャンセル" - - #: gtk/gtkplacesview.c:1648 - msgid "AppleTalk" -@@ -3421,11 +3421,11 @@ - - #: gtk/gtkplacesview.c:1741 - msgid "_Disconnect" --msgstr "切断(_D)" -+msgstr "切断" - - #: gtk/gtkplacesview.c:1751 - msgid "_Connect" --msgstr "接続(_C)" -+msgstr "接続" - - #: gtk/gtkplacesview.c:1892 - msgid "Unable to get remote server location" -@@ -3464,7 +3464,7 @@ - - #: gtk/gtkprintbackend.c:849 - msgid "_Remember password" --msgstr "パスワードを記憶する(_R)" -+msgstr "パスワードを記憶する" - - #: gtk/gtkprinteroptionwidget.c:542 - msgid "Select a filename" -@@ -3616,11 +3616,11 @@ - - #: gtk/gtkprintunixdialog.c:746 - msgid "Pre_view" --msgstr "プレビュー(_V)" -+msgstr "プレビュー" - - #: gtk/gtkprintunixdialog.c:748 - msgid "_Print" --msgstr "印刷(_P)" -+msgstr "印刷" - - #: gtk/gtkprintunixdialog.c:861 - msgid "Getting printer information failed" -@@ -3721,19 +3721,19 @@ - - #: gtk/gtkrecentchooserdefault.c:1689 - msgid "Copy _Location" --msgstr "場所のコピー(_L)" -+msgstr "場所のコピー" - - #: gtk/gtkrecentchooserdefault.c:1700 - msgid "_Remove From List" --msgstr "一覧から削除する(_R)" -+msgstr "一覧から削除する" - - #: gtk/gtkrecentchooserdefault.c:1707 - msgid "_Clear List" --msgstr "一覧のクリア(_C)" -+msgstr "一覧のクリア" - - #: gtk/gtkrecentchooserdefault.c:1719 - msgid "Show _Private Resources" --msgstr "個人的なリソースを表示する(_P)" -+msgstr "個人的なリソースを表示する" - - #. we create a placeholder menuitem, to be used in case - #. * the menu is empty. this placeholder will stay around -@@ -3828,7 +3828,7 @@ - - #: gtk/gtkshortcutssection.c:451 - msgid "_Show All" --msgstr "すべて表示する(_S)" -+msgstr "すべて表示する" - - #: gtk/gtkshortcutsshortcut.c:136 - msgid "Two finger pinch" -@@ -3996,43 +3996,43 @@ - - #: gtk/gtktextutil.c:57 - msgid "LRM _Left-to-right mark" --msgstr "LRM 左→右 Mark(_L)" -+msgstr "LRM 左→右 Mark" - - #: gtk/gtktextutil.c:58 - msgid "RLM _Right-to-left mark" --msgstr "RLM 右→左 Mark(_R)" -+msgstr "RLM 右→左 Mark" - - #: gtk/gtktextutil.c:59 - msgid "LRE Left-to-right _embedding" --msgstr "LRE 左→右 Embedding(_E)" -+msgstr "LRE 左→右 Embedding" - - #: gtk/gtktextutil.c:60 - msgid "RLE Right-to-left e_mbedding" --msgstr "RLE 右→左 Embedding(_M)" -+msgstr "RLE 右→左 Embedding" - - #: gtk/gtktextutil.c:61 - msgid "LRO Left-to-right _override" --msgstr "LRO 左→右 Override(_O)" -+msgstr "LRO 左→右 Override" - - #: gtk/gtktextutil.c:62 - msgid "RLO Right-to-left o_verride" --msgstr "RLO 右→左 Override(_V)" -+msgstr "RLO 右→左 Override" - - #: gtk/gtktextutil.c:63 - msgid "PDF _Pop directional formatting" --msgstr "PDF POP Directional Formatting(_P)" -+msgstr "PDF POP Directional Formatting" - - #: gtk/gtktextutil.c:64 - msgid "ZWS _Zero width space" --msgstr "ZWS Zero Width Space(_Z)" -+msgstr "ZWS Zero Width Space" - - #: gtk/gtktextutil.c:65 - msgid "ZWJ Zero width _joiner" --msgstr "ZWJ Zero Width Joiner(_J)" -+msgstr "ZWJ Zero Width Joiner" - - #: gtk/gtktextutil.c:66 - msgid "ZWNJ Zero width _non-joiner" --msgstr "ZWNJ Zero Width Non-Joiner(_N)" -+msgstr "ZWNJ Zero Width Non-Joiner" - - #: gtk/gtkvolumebutton.c:189 - msgid "Adjusts the volume" -@@ -7095,11 +7095,11 @@ - - #: gtk/ui/gtkappchooserdialog.ui:78 - msgid "_View All Applications" --msgstr "すべてのアプリケーションを表示(_V)" -+msgstr "すべてのアプリケーションを表示" - - #: gtk/ui/gtkappchooserdialog.ui:86 - msgid "_Find New Applications" --msgstr "新しいアプリケーションを探す(_F)" -+msgstr "新しいアプリケーションを探す" - - #: gtk/ui/gtkappchooserwidget.ui:119 - msgid "No applications found." -@@ -7139,15 +7139,15 @@ - - #: gtk/ui/gtkassistant.ui:68 - msgid "_Next" --msgstr "進む(_N)" -+msgstr "進む" - - #: gtk/ui/gtkassistant.ui:88 - msgid "_Back" --msgstr "戻る(_B)" -+msgstr "戻る" - - #: gtk/ui/gtkassistant.ui:107 - msgid "_Finish" --msgstr "完了(_F)" -+msgstr "完了" - - #: gtk/ui/gtkcolorchooserdialog.ui:6 - msgid "Select a Color" -@@ -7244,7 +7244,7 @@ - - #: gtk/ui/gtkfilechooserwidget.ui:474 - msgid "_Create" --msgstr "作成(_C)" -+msgstr "作成" - - #: gtk/ui/gtkfontchooserdialog.ui:6 - msgid "Select Font" -@@ -7268,15 +7268,15 @@ - - #: gtk/ui/gtkpagesetupunixdialog.ui:47 - msgid "_Format for:" --msgstr "フォーマット(_F):" -+msgstr "フォーマット:" - - #: gtk/ui/gtkpagesetupunixdialog.ui:80 gtk/ui/gtkprintunixdialog.ui:747 - msgid "_Paper size:" --msgstr "用紙サイズ(_P):" -+msgstr "用紙サイズ:" - - #: gtk/ui/gtkpagesetupunixdialog.ui:122 - msgid "_Orientation:" --msgstr "用紙の向き(_O):" -+msgstr "用紙の向き:" - - #: gtk/ui/gtkpagesetupunixdialog.ui:152 gtk/ui/gtkprintunixdialog.ui:794 - msgid "Portrait" -@@ -7330,7 +7330,7 @@ - - #: gtk/ui/gtkplacesview.ui:307 - msgid "Connect to _Server" --msgstr "サーバーへ接続(_S)" -+msgstr "サーバーへ接続" - - #: gtk/ui/gtkplacesview.ui:340 - msgid "Enter server address…" -@@ -7351,19 +7351,19 @@ - - #: gtk/ui/gtkprintunixdialog.ui:201 - msgid "_All Pages" --msgstr "すべてのページ(_A)" -+msgstr "すべてのページ" - - #: gtk/ui/gtkprintunixdialog.ui:216 - msgid "C_urrent Page" --msgstr "現在のページだけ(_U)" -+msgstr "現在のページだけ" - - #: gtk/ui/gtkprintunixdialog.ui:233 - msgid "Se_lection" --msgstr "選択(_L)" -+msgstr "選択" - - #: gtk/ui/gtkprintunixdialog.ui:249 - msgid "Pag_es:" --msgstr "ページ(_E):" -+msgstr "ページ:" - - #: gtk/ui/gtkprintunixdialog.ui:252 gtk/ui/gtkprintunixdialog.ui:270 - #: gtk/ui/gtkprintunixdialog.ui:277 -@@ -7384,15 +7384,15 @@ - - #: gtk/ui/gtkprintunixdialog.ui:334 - msgid "Copie_s:" --msgstr "コピーの数(_S):" -+msgstr "コピーの数:" - - #: gtk/ui/gtkprintunixdialog.ui:361 - msgid "C_ollate" --msgstr "ページを揃える(_O)" -+msgstr "ページを揃える" - - #: gtk/ui/gtkprintunixdialog.ui:375 - msgid "_Reverse" --msgstr "ページを逆順にする(_R)" -+msgstr "ページを逆順にする" - - #: gtk/ui/gtkprintunixdialog.ui:452 - msgid "Layout" -@@ -7400,19 +7400,19 @@ - - #: gtk/ui/gtkprintunixdialog.ui:475 - msgid "T_wo-sided:" --msgstr "両面印刷(_W):" -+msgstr "両面印刷:" - - #: gtk/ui/gtkprintunixdialog.ui:500 - msgid "Pages per _side:" --msgstr "段組み印刷(_S):" -+msgstr "段組み印刷:" - - #: gtk/ui/gtkprintunixdialog.ui:527 - msgid "Page or_dering:" --msgstr "ページの順番(_D):" -+msgstr "ページの順番:" - - #: gtk/ui/gtkprintunixdialog.ui:553 - msgid "_Only print:" --msgstr "印刷の対象(_O):" -+msgstr "印刷の対象:" - - #: gtk/ui/gtkprintunixdialog.ui:570 - msgid "All sheets" -@@ -7428,7 +7428,7 @@ - - #: gtk/ui/gtkprintunixdialog.ui:585 - msgid "Sc_ale:" --msgstr "拡大/縮小(_A):" -+msgstr "拡大/縮小:" - - #: gtk/ui/gtkprintunixdialog.ui:649 - msgid "Paper" -@@ -7436,19 +7436,19 @@ - - #: gtk/ui/gtkprintunixdialog.ui:672 - msgid "Paper _type:" --msgstr "種類(_T):" -+msgstr "種類:" - - #: gtk/ui/gtkprintunixdialog.ui:697 - msgid "Paper _source:" --msgstr "用紙のソース(_S):" -+msgstr "用紙のソース:" - - #: gtk/ui/gtkprintunixdialog.ui:722 - msgid "Output t_ray:" --msgstr "出力先のトレイ(_R):" -+msgstr "出力先のトレイ:" - - #: gtk/ui/gtkprintunixdialog.ui:776 - msgid "Or_ientation:" --msgstr "用紙の向き(_I):" -+msgstr "用紙の向き:" - - #: gtk/ui/gtkprintunixdialog.ui:876 - msgid "Job Details" -@@ -7456,11 +7456,11 @@ - - #: gtk/ui/gtkprintunixdialog.ui:899 - msgid "Pri_ority:" --msgstr "優先順位(_O):" -+msgstr "優先順位:" - - #: gtk/ui/gtkprintunixdialog.ui:923 - msgid "_Billing info:" --msgstr "サマリ情報(_B):" -+msgstr "サマリ情報:" - - #: gtk/ui/gtkprintunixdialog.ui:967 - msgid "Print Document" -@@ -7469,12 +7469,12 @@ - #. this is one of the choices for the print at option in the print dialog - #: gtk/ui/gtkprintunixdialog.ui:987 - msgid "_Now" --msgstr "今すぐ印刷する(_N)" -+msgstr "今すぐ印刷する" - - #. this is one of the choices for the print at option in the print dialog. It also serves as the label for an entry that allows the user to enter a time. - #: gtk/ui/gtkprintunixdialog.ui:1003 - msgid "A_t:" --msgstr "時間を指定する(_T):" -+msgstr "時間を指定する:" - - #. Ability to parse the am/pm format depends on actual locale. You can remove the am/pm values below for your locale if they are not supported. - #: gtk/ui/gtkprintunixdialog.ui:1007 gtk/ui/gtkprintunixdialog.ui:1009 -@@ -7494,7 +7494,7 @@ - #. this is one of the choices for the print at option in the print dialog. It means that the print job will not be printed until it explicitly gets 'released'. - #: gtk/ui/gtkprintunixdialog.ui:1050 - msgid "On _hold" --msgstr "保留する(_H)" -+msgstr "保留する" - - #: gtk/ui/gtkprintunixdialog.ui:1054 gtk/ui/gtkprintunixdialog.ui:1055 - msgid "Hold the job until it is explicitly released" -@@ -7507,12 +7507,12 @@ - #. this is the label used for the option in the print dialog that controls the front cover page. - #: gtk/ui/gtkprintunixdialog.ui:1115 - msgid "Be_fore:" --msgstr "前(_F):" -+msgstr "前:" - - #. this is the label used for the option in the print dialog that controls the back cover page. - #: gtk/ui/gtkprintunixdialog.ui:1139 - msgid "_After:" --msgstr "後(_A):" -+msgstr "後:" - - #: gtk/ui/gtkprintunixdialog.ui:1181 - msgid "Job" -@@ -7795,7 +7795,7 @@ - #: modules/printbackends/file/gtkprintbackendfile.c:676 - #: modules/printbackends/test/gtkprintbackendtest.c:501 - msgid "Pages per _sheet:" --msgstr "段組み印刷(_S):" -+msgstr "段組み印刷:" - - #: modules/printbackends/cups/gtkprintbackendcups.c:1129 - #: modules/printbackends/cups/gtkprintbackendcups.c:1438 -@@ -8349,7 +8349,7 @@ - - #: modules/printbackends/file/gtkprintbackendfile.c:745 - msgid "_Output format" --msgstr "出力の形式(_O)" -+msgstr "出力の形式" - - #: modules/printbackends/lpr/gtkprintbackendlpr.c:394 - msgid "Print to LPR" diff --git a/debian/patches/gtk3_3001-primary-accelerator-command.patch b/debian/patches/gtk3_3001-primary-accelerator-command.patch deleted file mode 100644 index b326893397..0000000000 --- a/debian/patches/gtk3_3001-primary-accelerator-command.patch +++ /dev/null @@ -1,192 +0,0 @@ -Description: Change primary accelerator from Control to Command -Origin: tsundoku custom patchset -Author: tsundoku -Last-Update: 2020-07-07 ---- a/gdk/gdkkeys.c -+++ b/gdk/gdkkeys.c -@@ -638,7 +638,7 @@ - switch (intent) - { - case GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR: -- return GDK_CONTROL_MASK; -+ return GDK_SUPER_MASK; - - case GDK_MODIFIER_INTENT_CONTEXT_MENU: - return 0; -@@ -647,10 +647,10 @@ - return GDK_SHIFT_MASK; - - case GDK_MODIFIER_INTENT_MODIFY_SELECTION: -- return GDK_CONTROL_MASK; -+ return GDK_SUPER_MASK; - - case GDK_MODIFIER_INTENT_NO_TEXT_INPUT: -- return GDK_MOD1_MASK | GDK_CONTROL_MASK; -+ return GDK_MOD1_MASK | GDK_SUPER_MASK | GDK_CONTROL_MASK; - - case GDK_MODIFIER_INTENT_SHIFT_GROUP: - return 0; ---- a/gtk/deprecated/gtkstock.c -+++ b/gtk/deprecated/gtkstock.c -@@ -104,7 +104,7 @@ - { - item = gtk_stock_item_copy (item); - ((GtkStockItem *)item)->modifier = (NON_STATIC_MASK | -- _gtk_get_primary_accel_mod ()); -+ GDK_SUPER_MASK); - } - else - { ---- a/gtk/gtkentry.c -+++ b/gtk/gtkentry.c -@@ -1953,16 +1953,16 @@ - add_move_binding (binding_set, GDK_KEY_KP_Left, 0, - GTK_MOVEMENT_VISUAL_POSITIONS, -1); - -- add_move_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_Right, GDK_SUPER_MASK, - GTK_MOVEMENT_WORDS, 1); - -- add_move_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_Left, GDK_SUPER_MASK, - GTK_MOVEMENT_WORDS, -1); - -- add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_SUPER_MASK, - GTK_MOVEMENT_WORDS, 1); - -- add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_SUPER_MASK, - GTK_MOVEMENT_WORDS, -1); - - add_move_binding (binding_set, GDK_KEY_Home, 0, -@@ -1977,49 +1977,49 @@ - add_move_binding (binding_set, GDK_KEY_KP_End, 0, - GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); - -- add_move_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_Home, GDK_SUPER_MASK, - GTK_MOVEMENT_BUFFER_ENDS, -1); - -- add_move_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_End, GDK_SUPER_MASK, - GTK_MOVEMENT_BUFFER_ENDS, 1); - -- add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_SUPER_MASK, - GTK_MOVEMENT_BUFFER_ENDS, -1); - -- add_move_binding (binding_set, GDK_KEY_KP_End, GDK_CONTROL_MASK, -+ add_move_binding (binding_set, GDK_KEY_KP_End, GDK_SUPER_MASK, - GTK_MOVEMENT_BUFFER_ENDS, 1); - - /* Select all - */ -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, - "move-cursor", 3, - GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, - G_TYPE_INT, -1, - G_TYPE_BOOLEAN, FALSE); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SUPER_MASK, - "move-cursor", 3, - GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, - G_TYPE_INT, 1, - G_TYPE_BOOLEAN, TRUE); - -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, - "move-cursor", 3, - GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, - G_TYPE_INT, -1, - G_TYPE_BOOLEAN, FALSE); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_SUPER_MASK, - "move-cursor", 3, - GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS, - G_TYPE_INT, 1, - G_TYPE_BOOLEAN, TRUE); - /* Unselect all - */ -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_SUPER_MASK, - "move-cursor", 3, - GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_VISUAL_POSITIONS, - G_TYPE_INT, 0, - G_TYPE_BOOLEAN, FALSE); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_SUPER_MASK, - "move-cursor", 3, - GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_VISUAL_POSITIONS, - G_TYPE_INT, 0, -@@ -2048,7 +2048,7 @@ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0, - "backspace", 0); - -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_u, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_u, GDK_SUPER_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, - G_TYPE_INT, -1); -@@ -2057,40 +2057,40 @@ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK, - "backspace", 0); - -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SUPER_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, - G_TYPE_INT, 1); - -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SUPER_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, - G_TYPE_INT, 1); - -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SUPER_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, - G_TYPE_INT, -1); - - /* Cut/copy/paste */ - -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_SUPER_MASK, - "cut-clipboard", 0); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_SUPER_MASK, - "copy-clipboard", 0); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_SUPER_MASK, - "paste-clipboard", 0); - - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK, - "cut-clipboard", 0); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SUPER_MASK, - "copy-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK, - "paste-clipboard", 0); - - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK, - "cut-clipboard", 0); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SUPER_MASK, - "copy-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SHIFT_MASK, - "paste-clipboard", 0); -@@ -2120,9 +2120,9 @@ - GTK_PARAM_READABLE | - G_PARAM_DEPRECATED)); - /* Emoji */ -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_SUPER_MASK, - "insert-emoji", 0); -- gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_CONTROL_MASK, -+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_SUPER_MASK, - "insert-emoji", 0); - - gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ENTRY_ACCESSIBLE); diff --git a/debian/patches/series b/debian/patches/series index 8a476806c9..53efe9506b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -5,8 +5,8 @@ reftest_compare_surfaces-Report-how-much-the-images-diffe.patch reftests-Allow-minor-differences-to-be-tolerated.patch Stop-looking-for-modules-in-cwd.patch atk_focus_tracker_notify.deprecated.patch -gtk3_3000-ja-no-mnemonics.patch -gtk3_3001-primary-accelerator-command.patch -gtk3_3002-symbolic-accellabel.patch -gtk3_3003-toolbar-icons-16px.patch -gtk3_3004-gtkmessagedialog-style.patch +300_no-mnemonics.patch +301_command-key.patch +302_symbolic-accellabel.patch +303_toolbar-icons-16px.patch +304_gtkmessagedialog-style.patch