LINUX.ORG.RU
ФорумTalks

[gtk][ненависть] ну и кто они после этого?

 ,


0

1

обновил сегодня gtk до 2.24.8 на свою голову. через какое-то время с ужасом обнаружил, что в терминале напрочь отвалился Alt. расследование сего печального события привело к тупому фиксу в gtk

commit 32b70a56d13050b6d2b0a570c436da1c303814f3 Author: Michael Natterer <mitch@gimp.org> Date: Mon Nov 7 20:09:00 2011 +0100

gdk: exclude MOD1 from the virtual modifier mapping

which effectively nails down the MOD1 == ALT assumption that is valid in all other parts of GTK+. After the modifier abstraction fixes for OSX, the virtual mapping is now (correctly) used in more places, and caused problems with the common default PC keyboard layout on X11 that colocates ALT and META on the same key. (cherry picked from commit ac943bf69a87c992cfde59c6720ef08fdd20e683)

gdk/x11/gdkkeys-x11.c | 20 ++++++++++++-------- 1 files changed, 12 insertions(+), 8 deletions(-)

вот нахрена такое делать в стабильной ветке?

пришлось делать свой патчик, чтобы отменить это безобразие. если кому надо

--- gtk+-2.24.8/gdk/x11/gdkkeys-x11.c.orig      2011-11-10 19:38:03.000000000 +0200
+++ gtk+-2.24.8/gdk/x11/gdkkeys-x11.c   2011-11-11 14:14:05.940999734 +0200
@@ -1684,12 +1684,13 @@
   keymap = GET_EFFECTIVE_KEYMAP (keymap);
   keymap_x11 = GDK_KEYMAP_X11 (keymap);
 
-  /* See comment in add_virtual_modifiers() */
-  for (i = 4; i < 8; i++)
+  for (i = 3; i < 8; i++)
     {
       if ((1 << i) & *modifiers)
         {
-         if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
+          if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
+            *modifiers |= GDK_MOD1_MASK;
+         else if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
            *modifiers |= GDK_SUPER_MASK;
          else if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
            *modifiers |= GDK_HYPER_MASK;
@@ -1728,16 +1729,12 @@
   keymap = GET_EFFECTIVE_KEYMAP (keymap);
   keymap_x11 = GDK_KEYMAP_X11 (keymap);
 
-  /*  This loop used to start at 3, which included MOD1 in the
-   *  virtual mapping. However, all of GTK+ treats MOD1 as a
-   *  synonym for Alt, and does not expect it to be mapped around,
-   *  therefore it's more sane to simply treat MOD1 like SHIFT and
-   *  CONTROL, which are not mappable either.
-   */
-  for (i = 4; i < 8; i++)
+  for (i = 3; i < 8; i++)
     {
       if ((1 << i) & *state)
         {
+          if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
+            *state |= GDK_MOD1_MASK;            
          if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
            *state |= GDK_SUPER_MASK;
          if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
@@ -1825,8 +1822,7 @@
     {
       if (*state & vmods[j])
         {
-          /* See comment in add_virtual_modifiers() */
-          for (i = 4; i < 8; i++)
+          for (i = 3; i < 8; i++)
             {
               if (keymap_x11->modmap[i] & vmods[j])
                 {
★★★★★
Ответ на: комментарий от xorik

при чем тут роллинг? менять поведение либы в пределах минорного багфикс релиза - за такое отрывают все, что висит. и к дистрибутивам это не имеет никакого отношения

ananas ★★★★★
() автор топика

Это они в стиле одного из разработчиков KDE намекают, что пора отведать GTK 3.0.

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

терминал на vte. там кругом gdk-шные функции используются

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

> И ты конечно пошел на ЛОР жаловаться, вместо того чтобы отписаться в багзилле?

где ты увидел жалобы?

ananas ★★★★★
() автор топика

> вот нахрена такое делать в стабильной ветке?

Им глубоко плевать на пользователей своих поделий, они вообще о таких мелочах не думают.

ranka-lee
()
Ответ на: комментарий от xorik

если ты не заметил - я еще и решение сей проблемы дал. так что это канает на эдвайс-тред

ananas ★★★★★
() автор топика

Ты хотел кого-то удивить тем, что GTK - говно?

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

> Ну хорошо, но тогда тем более надо в багзиллу и патч приложить :)

Разрабам, которые это официально поломали?

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

Кому же еще. Они видимо недостаточно хорошо тестируют, раз баг всплыл

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

подожду пока. тут надо бы еще и кишки vte посмотреть, может там тоже косяков как грязи. а потом уже патчи в мейнстрим лудить

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

> Это они в стиле одного из разработчиков KDE намекают, что пора отведать GTK 3.0.

Пусть допилят сначала, а потом кормят.

pevzi ★★★★★
()

Тоже сегодня обновился на свою голову. Жопорукие дебилы.

geekless ★★
()

О, а я все думал к чему это маску модификаторов поменяли.

baverman ★★★
()
Ответ на: Наглое 4.2 от terminator

> УМВР

что у тебя работает? проблема проявляется на vte терминалах, слинкованных с gtk2. ты уверен, что эти условия у тебя соблюдены, чтобы 4.2 тут разбрасывать?

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

>что у тебя работает? проблема проявляется на vte терминалах, слинкованных с gtk2. ты уверен, что эти условия у тебя соблюдены, чтобы 4.2 тут разбрасывать?

Да. Какой именно терминал у тебя не работает, мальчик?

terminator
()

Сегодня прилетело обновление vte. Alt заработал. Беру свои слова назад: они не жопорукие дебилы. Они просто жопорукие.

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

А где искать обновление vte? В его родном git ветке 0-28 последние изменения 6-недельной давности связаны с переводами и ничего похожего не видно в истории?

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

Ух, там же написано:

source=(http://ftp.gnome.org/pub/GNOME/sources/vte/0.28/vte-$pkgver.tar.xz
make_alt_work.patch::http://git.gnome.org/browse/vte/patch/?id=b73782a28894e25ed146271f9d6c6775a6836199)

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

Вопрос - где его взять, тем у кого нет Арча?

не надо его брать. просто перед make сделать

sed -i "s/GDK_META_MASK/GDK_MOD1_MASK/" src/keymap.h

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

Это то же, что посоветовано и в багзилле vte. Мне это не помогло, комбинации Alt+... в mc, запущенном в Terminal не работают.

pandrey ★★
()

Блин :(

Сам вчера дома заметил, что alt+s в mc больше не работает!

Ну что за уроды? То xkeyboard-config поломают так, что приходится откатываться на старую версию (чтобы shift+Fx в mc работало) и вписывать его в blacklist, то еще что-нибудь…

Вот есть же хороший принцип: «работает - не трогай!». Ан нет…

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

> Полезный функционал объявили deprecated и отменили, введя вместо него какие-то суррогатные замены.

например? единственное, что меня держит на gtk2, это отсутствие нужного софта, портированного на gtk3. не хочу держать в системе зоопарк

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

Ну, например: отображаете вы изображение и хотите выбрать рамкой его участок, ну или сечение провести. Если каждый раз при движении мыши перерисовывать линию, получатся очень заметные тормоза (хотя, ХЗ, может быть с этим делом они и разобрались).

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

Draw signals are normally delivered when a drawing area first comes onscreen, or when it's covered by another window and then uncovered. You can also force an expose event by adding to the «damage region» of the drawing area's window; gtk_widget_queue_draw_area() and gdk_window_invalidate_rect() are equally good ways to do this. You'll then get a draw signal for the invalid region.

не оно?

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

Раньше это делалось при помощи GdkGC, рисованием XOR'ом; сейчас предлагается какую-нибудь дрянь вроде cairo использовать.

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

Ну так и в чем проблема? Что GdkGC, что Cairo используют XRender для рисования, разве нет? При обновлении отксориваешь старую линию обратно и наксориваешь новую. Чтобы мерцания не было, можно двойную буферизацию заюзать.

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