[sisyphus] Possible problems with Sisyphus XFree86 build

Alex Morozov =?iso-8859-1?q?alex_=CE=C1_idisys=2Eiae=2Ensk=2Esu?=
Ср Ноя 28 02:50:48 MSK 2001


В общем, оговорюсь сразу, возможно, наблюдаемый мною глюк специфичен только
для моей машины, т.к. у меня все еще не ALT что-нибудь, а компот из бывшего
Mdk8 + апдейты из 8.1 + множество альтовых пакетов. Впрочем, насколько я
себе представляю механику процесса, в "pure ALT" должно быть точно также.

Суть проблемы:
	в билдах XF86-libs от ALT (и, видимо, Mdk8) не работают какие-то
(пока не знаю какие) механизмы, позволяющие успешно функционировать вызову
gtk_socket_steal (захват/swallow произвольно выбранного "рутового" виджета
внутрь GtkSocket). Приложенный steal-xwin.c должен продемонстрировать
проблему. 

Для демонстрации сначала соберите его 
(cc -o steal-win steal-win.c `gtk-config --cflags --libs`)

Потом сделайте следующее: запустите, например, xeyes, с помощью xprop (или
sawfish-client, rep/rep-gtk рулиз :-)) выясните, каков XID у окна xeyes
(xprop пишет это в строчке вида
WM_CLIENT_LEADER(WINDOW): window id # 0x1400007
), только не забудьте пересчитать hexadecimal в decimal (например, так:
printf "%d\n" 0x1400007
(вместо 0x1400007 - то, что написал вам xprop))

После этого можете запускать steal-xwin:
./steal-xwin <xid> 100 100

В идеале вы должны получить глазки, затолканные внутрь появившегося
окошечка, потаскайте его по экрану, чтобы убедиться, что они действительно
затолкались, а не просто положены сверху :-)... 

Информация к размышлению для Константина Волчкова:  а ALTовых и Mdk'шных
либах у меня этот фокус не срабатывает (немного по-разному, но не суть), 
а вот на RHовых (от RH-7.2, простое копирование libX11.so.*, libXt.so.*
libXext.so.* из их rpm'а поверх рабочих либ) - все Ok, даже ничего при этом
(Xserver, приложения) при этом не ломается. Я так думаю, опять какие-нить
новомодные патчи, а? :-). Кстати, а расскажите, зачем в ALTовой дистрибуции
XFree присутствуют хаки имени XFree86-4.0.2-emacs_key.patch и
XFree86-4.0.99.1-winkey-alt-meta.patch? Грязные же хаки, и, к тому же, я
надеюсь, мало кому действительно необходимые? Есть же способ с рантаймовой
модификацией модификаторов, если на то пошло?... А то, блин, давишь <LWIN>
она кажет тебе Meta_L, давишь следом x, она и кажет тебе ... х... Я пока
понял, что за ... Интересно, о каких пользователях emacs'а призван
заботиться этот патч? :-)

Извините, если напрасно побеспокоил публику, и у всех все работает. В любом
случае, дайте мно, пожалуйста, знать. К сожалению, как я уже говорил, доступ
к этому ящику у меня сейчас нерегулярный и неудобный. а переносить его лень,
поэтому черкните пару строчек на morozov на novosoft.ru, если у кого-то
заработает (ну, или Константин, Вы, найдете решение).

С уважением, Алексей Морозов.

P.S. Да, в gnome-libs от ALT надо, похоже, апдейтить мой zvtkbdhack. В
соответствии с постановлениями партии и правительства Home и End более не
обозначаются через \033[1~ и \033[4~. Для End на моем Mdk использьзуется
\0330F, а вот для Home что-то еще, не знаю пока что... Впрочем, на соседней
фряшке, Home/End в xterm/xterm-color какие-то свои ,особенные....
"Заколебал ты!"... Взялся бы кто-нить, привел в соответствие termcap/terminfo
и написал большими буквами, опуская матерные слова: ЕСЛИ ВЫ ПИШЕТЕ ОЧЕРЕДНОЙ
XTERM, помните: ПРАВИЛЬНАЯ РАСКЛАДКА - ВОТ ТАКАЯ... И список...
P.S.S. Прошу прощения за многословность,5:45am :-)
 
----------- следующая часть -----------
/* steal-xwin.c */
#include <gtk/gtk.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
        GtkWidget *win, *vbox, *scrolled_win, *sock, *label;
        guint32 xwin_id;
        gint width, height;

        gtk_init (&argc, &argv);

        if (argc != 4)
        {       g_print ("usage: %s <xwin id> <width> <height>\n",
argv[0]);
                exit (1);
        }
        xwin_id = atoi (argv[1]);
        g_print ("%d\n", xwin_id);
        width = atoi (argv[2]);
        height = atoi (argv[3]);

        win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_policy(GTK_WINDOW (win), TRUE, FALSE, FALSE);

        vbox = gtk_vbox_new (FALSE, 0);
        gtk_container_add (GTK_CONTAINER (win), vbox);

        scrolled_win = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW
(scrolled_win),
                        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
        gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE,
0);

        sock = gtk_socket_new ();
        gtk_widget_set_usize (sock, width, height);
        gtk_scrolled_window_add_with_viewport (
                        GTK_SCROLLED_WINDOW (scrolled_win), sock);
        gtk_widget_realize (sock);
        gtk_socket_steal (GTK_SOCKET (sock), xwin_id);
        gtk_viewport_set_shadow_type (
                        GTK_VIEWPORT (GTK_BIN(scrolled_win)->child),
                        GTK_SHADOW_NONE);
        gtk_widget_set_usize (
                        GTK_BIN(scrolled_win)->child, width, height);

        label = gtk_label_new ("stolen xwin");
        gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);

        gtk_widget_show_all (win);
        gtk_main ();
        return 0;
}


Подробная информация о списке рассылки Sisyphus