LINUX.ORG.RU

Исправлена ошибка firefox'а с неработающими hotkeys(в русской раскладке)


0

0

...Соотвествующий патч уже одобрен и принят, в ff3 этого былинного бага уже не будет. Автор патча - некто Олег Крылов, который, согласно программе "Деньги за исправление багов" получит свои законные 500$.

>>> mozilla-russia.org

Низкий поклон тебе, Олег Крылов!!!!

anonymous
()

Пошёл обновляться. Посмотрим.

Sikon ★★★
()

5 баллов Крылову! хоть кто-то, блин, не поленился это сделать!!! :(

madstorm
()

Чтож покойся с миром любимый баг. Помянем его браться и сестры. Он прожил долгую и интересную жизнь. Да не будет он забыт в веках.

svoloch
()

дааа....
Вроде еще никогда исправление ОДНОГО бага не выходило на новостную страницу...

Igorrr ★★★★
()

А как же текучесть алокатора памяти ?? Ыыы?!

SilentLexx
()
Ответ на: комментарий от Igorrr

Думаю, когда в KDE переключалку раскладок починят, об этом тоже на главной странице напишут. Легенда всё-таки.

Sikon ★★★
()
Ответ на: комментарий от Igorrr

> Вроде еще никогда исправление ОДНОГО бага не выходило на новостную страницу...

Это ж не просто баг! Это легенда!!!

SilentLexx
()
Ответ на: комментарий от Igorrr

Ну, так бага какая! ;) Сколько все плевались, но через столько лет кто-то таки сделал дело ;)))))))))) Супер! ;)

vovans ★★★★★
()

Ну слава Патрику, наконец-то. Олегу огромный респект.

Relan ★★★★★
()
Ответ на: комментарий от vovans

Интересно это перенесется на другие продукты использующие движок мозилы? На тандерберд и на комод, например...

anonymous
()
Ответ на: комментарий от anonymous

> Интересно это перенесется на другие продукты использующие движок мозилы? На тандерберд и на комод, например...

Когда они перейдут на Gecko 1.9 - да.

Sikon ★★★
()

> Исправлена ошибка firefox'а с неработающими hotkeys(в русской раскладке)

Всё, надоело, перехожу на оперу.

Igron ★★★★★
()

не верю О_о

anonymous
()

>И конечно мы не останавливаемся на этом. Встречайте новый баг смех сквозь слезы.

anonymous
()

Супер новость! :)))) Олегу большой респект! В PS от что значит открытые исходники! ;)

anonymous
()

А-а-а!! Дык это просто праздник какой-то! (С)

localstorm
()

УРАААААААААААААААААААААААААааааа!!!!!!

O-Ren_Ishii
()

Ура, товарищи, ура!

anonymous
()
Ответ на: комментарий от Sikon

А что за бага с переключалкой? Киньте ссылку, если не лень, please

anonymous
()
Ответ на: комментарий от anonymous

Не трогайте святое грязными лапами, баги а KDE и firefox наше фсё :))
А если серьезно, Олегу Крылову сердечное спасибо :)

sleepflint ★★★
()

моё почтение Олегу Крылову! спасибо

rudchenkos
()

С наступающим... виндекапцом! (с)

anonymous
()

Вечно они там всё ломают. Вот и этот баг сломали! :(

Pythagoras ★★
()

"И обязательно - предлагайте свои варианты багов, которые вы хотели бы видеть в нашей программе." (c) ссылка.

Гы-гы-гы. Хороший призыв. Не вопрос, ребята. Предложим. :)

Zubok ★★★★★
()

Теперь есть повод нажраца. Ура товарищи!!!

anonymous
()

Автору респект! Наконец-то этот глюк одолели! А что в существующую ветку патч не внесут? Или на этом версия 2 закончится?

KUser
()

Пожалуй, первый раз за все время на мнговение, сразу после прочтения заголовка, мне захотелось отправить чуток денег автору патча. Но быстро осознал что системы "ткни ссылку и заплати" нет (я всякими карточками ни разу не пользовался, один нал) ну и еще эта надись в конце новости - $500 и желание пропало :).

В любом случае это просто супер новость.

anonymous
()

Не прошло и семи лет.

birdie ★★★★★
()

Интересно, а в других национальных раскладках существует такая проблема с горячими кнопками? Если существует, тотоже решилась этим патчем? Или автор сделал костыль специально для русской раскладки?

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

>в других национальных раскладках существует такая проблема с горячими кнопками?

Да. Вообще во всех раскладках, отличающихся от Latin-1. НЯП, с двораком тоже проблема была.

>Или автор сделал костыль специально для русской раскладки?

Насколько я понял из обсуждения (я подписался на рассылку по этому багу), это не костыль, а именно решение. По какому принципу оно сделано - не помню.

Xellos ★★★★★
()

Вот так вот Linux превращается в обычную операционную систему, исчезают легенды firefox'а, KDE... Теперь о них будут вспоминать только старые линуксоиды за кружечкой пива... А вообще очень рад!

glebone
()
Ответ на: комментарий от Zubok

Вот меня то же итересует - это всё тот же патч, автор которого не раз говорил, что это жуткий костыль, и нужно переписывать всю подсистему работы с клавиатурой? Если да, то это только для русской "ЙЦУКЕН". И грош цена включению таких патчей.

anonymous
()

Простой советский парень Олег Крылов... Мы любим тебя.

anonymous
()
Ответ на: комментарий от anonymous

Блин, такой ведь баг был. Так все к нему привыкли, нам будет его не хватать... Теперь не о чем будет говорить в постах о FF... Может вернем всё в зад?

anonymous
()

Пойти нажраться на радостях!

svu ★★★★★
()
Ответ на: комментарий от Zubok

Конечно в фоксе. В epiphany, собранной на xulrunner'e такого бага никогда и не было.

scamelscrud
()

для страждущих... патч на 2.0.0.9
не проверен, ибо собрать ещё не успел

--- mozilla/widget/src/gtk2/nsWindow.cpp.orig   2007-04-19 22:46:03.000000000 +0400
+++ mozilla/widget/src/gtk2/nsWindow.cpp        2007-11-23 11:35:57.000000000 +0300
@@ -1809,6 +1809,14 @@
     LOGFOCUS(("Done with container focus out [%p]\n", (void *)this));
 }
 
+inline PRBool
+is_latin_shortcut_key(guint aKeyval)
+{
+    return ((GDK_0 <= aKeyval && aKeyval <= GDK_9) ||
+            (GDK_A <= aKeyval && aKeyval <= GDK_Z) ||
+            (GDK_a <= aKeyval && aKeyval <= GDK_z));
+}
+
 gboolean
 nsWindow::OnKeyPressEvent(GtkWidget *aWidget, GdkEventKey *aEvent)
 {
@@ -1883,6 +1891,62 @@
         // clear isShift so the character can be inserted in the editor
 
         if (event.isControl || event.isAlt || event.isMeta) {
+            GdkEventKey tmpEvent = *aEvent;
+
+            // Fix for bug 69230:
+            // if modifier key is pressed and key pressed is not latin character,
+            // we should try other keyboard layouts to find out correct latin
+            // character corresponding to pressed key;
+            // that way shortcuts like Ctrl+C will work no matter what
+            // keyboard layout is selected
+            // We don't try to fix up punctuation accelerators here,
+            // because their location differs between latin layouts
+            if (!is_latin_shortcut_key(event.charCode)) {
+                // We have a non-latin char, try other keyboard groups
+                GdkKeymapKey *keys;
+                guint *keyvals;
+                gint n_entries;
+                PRUint32 latinCharCode;
+                gint level;
+
+                if (gdk_keymap_translate_keyboard_state(NULL,
+                                                        tmpEvent.hardware_keycode,
+                                                        (GdkModifierType)tmpEvent.state,
+                                                        tmpEvent.group,
+                                                        NULL, NULL, &level, NULL)
+                    && gdk_keymap_get_entries_for_keycode(NULL,
+                                                          tmpEvent.hardware_keycode,
+                                                          &keys, &keyvals,
+                                                          &n_entries)) {
+                    gint n;
+                    for (n=0; n<n_entries; n++) {
+                        if (keys[n].group == tmpEvent.group) {
+                            // Skip keys from the same group
+                            continue;
+                        }
+                        if (keys[n].level != level) {
+                            // Allow only same level keys
+                            continue;
+                        }
+                        if (is_latin_shortcut_key(keyvals[n])) {
+                            // Latin character found
+                            if (event.isShift)
+                                tmpEvent.keyval = gdk_keyval_to_upper(keyvals[n]);
+                            else
+                                tmpEvent.keyval = gdk_keyval_to_lower(keyvals[n]);
+                            tmpEvent.group = keys[n].group;
+                            latinCharCode = nsConvertCharCodeToUnicode(&tmpEvent);
+                            if (latinCharCode) {
+                                event.charCode = latinCharCode;
+                                break;
+                            }
+                        }
+                    }
+                    g_free(keys);
+                    g_free(keyvals);
+                }
+            }
+
            // make Ctrl+uppercase functional as same as Ctrl+lowercase
            // when Ctrl+uppercase(eg.Ctrl+C) is pressed,convert the charCode
            // from uppercase to lowercase(eg.Ctrl+c),so do Alt and Meta Key
@@ -1900,14 +1964,11 @@
            // bugs 50255 and 351310)
            if (!event.isControl && event.isShift &&
                (event.charCode < GDK_0 || event.charCode > GDK_9)) {
-               GdkKeymapKey k = { aEvent->hardware_keycode, aEvent->group, 0 };
-               guint savedKeyval = aEvent->keyval;
-               aEvent->keyval = gdk_keymap_lookup_key(gdk_keymap_get_default(), &k);
-               PRUint32 unshiftedCharCode = nsConvertCharCodeToUnicode(aEvent);
+               GdkKeymapKey k = { tmpEvent.hardware_keycode, tmpEvent.group, 0 };
+               tmpEvent.keyval = gdk_keymap_lookup_key(gdk_keymap_get_default(), &k);
+               PRUint32 unshiftedCharCode = nsConvertCharCodeToUnicode(&tmpEvent);
                if (unshiftedCharCode)
                    event.charCode = unshiftedCharCode;
-               else
-                   aEvent->keyval = savedKeyval;
            }
         }
     }

TOHbl4
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.