Summary: | Падают python приложения использующие gtk.gdk.Window.set_user_time | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Igor Androsov <blacester> |
Component: | python-module-pygtk | Assignee: | Nobody's working on this, feel free to take it <nobody> |
Status: | REOPENED --- | QA Contact: | qa-sisyphus |
Severity: | major | ||
Priority: | P2 | CC: | mutabor |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Igor Androsov
2008-03-25 00:33:08 MSK
Прошу прощения, необходимо баг перевесить на основной пакет - python-module-pygtk, сюда попал похоже из-за моей невнимательности. А каким образом функция set_user_time связана с X11? Да, и если deskbar-applet'а рабочего в Сизифе сейчас нет, то не будет хуже его туда положить. (In reply to comment #2) > А каким образом функция set_user_time связана с X11? > Да, и если deskbar-applet'а рабочего в Сизифе сейчас нет, то не будет хуже его > туда положить. Я конечно в питоне плохо разбираюсь, но помоему вот таким образом: смотрим pygtk-%ver/gtk/gdk-base.defs ---грызь--- (define-method set_user_time (of-object "GdkWindow") (c-name "gdk_x11_window_set_user_time") (return-type "none") (parameters '("guint32" "timestamp") ) ) дальше смотрим pygtk-%ver/gtk/gdk.override #if defined(GDK_WINDOWING_X11) #include <gdk/gdkx.h> #elif defined(GDK_WINDOWING_WIN32) #include <gdk/gdkwin32.h> #endif и собственно в gdk/gdkx.h определена void gdk_x11_window_set_user_time (GdkWindow *window, guint32 timestamp); на которую ссылается питоновский алиас set_user_time Здесь вообще всё интересно... Когда я попытался использовать функцию gdk_window_set_user_time в программе на C, то получил ошибку при линковке: cc gtk-dnd.o /usr/lib/libgtk-x11-2.0.so /usr/lib/libgdk-x11-2.0.so /usr/lib/libatk-1.0.so /usr/lib/libgdk_pixbuf-2.0.so /usr/lib/libpangocairo-1.0.so /usr/lib/libcairo.so /usr/lib/libpangoft2-1.0.so /usr/lib/libfontconfig.so /usr/lib/libfreetype.so /usr/lib/libz.so /usr/lib/libpango-1.0.so /usr/lib/libm.so /usr/lib/libgobject-2.0.so /usr/lib/libgmodule-2.0.so /usr/lib/libdl.so /usr/lib/libglib-2.0.so -o gtk-dnd gtk-dnd.o: In function `main': gtk-dnd.c:(.text+0x4f9): undefined reference to `gdk_window_set_user_time' collect2: выполнение ld завершилось с кодом возврата 1 make: *** [gtk-dnd] Ошибка 1 Таким образом получается, что, несмотря на то, что в заголовках gdk эта функция определена, в библиотеке её нет. Так что pygtk тут, похоже, не причём; надо разбираться, почему в нашей gdk эта функция отсутствует. (In reply to comment #4) Хм, а если не сложно код в студию, как завершу перевод системы на 64бита, посмотрю. #include <gtk/gtk.h> int main (int argc, char **argv) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window) gtk_window_set_user_time(window->window, 12345); /* На всякий случай, вообще-то до этого места не доходит */ gtk_main(); } > gtk_window_set_user_time(window->window, 12345);
А может будет вернее gdk_x11_window_set_user_time(window->window, 12345);
Да, с C-шной функцией я ошибся... так что с gdk подозрения сняты. А с остальным, по-моему, всё ясно: если нам нужен метод set_user_time, то в спеке нужно убрать строчки: # create our version of gdkconfig.h cp %_libdir/gtk-2.0/include/gdkconfig.h ./ %__subst "s|GDK_WINDOWING_X11|GDK_WINDOWING_DIRECTFB|g" gdkconfig.h # disable direct X11 using in python module %__subst "s|-DGDK_TARGET_X11||g" ./configure и # don't like x11 symbols due directfb objdump -t %buildroot%python_sitelibdir/gtk-2.0/gtk/_gtk.so | grep -i x11 && exit 1 как собственно уже и говорилось. Вносимые в этих строках изменения как раз и зарубают объявление метода set_user_time. не моё А зачем нужна эта функция в данном случае? Я про неё читаю gdk_x11_window_set_user_time () Note that this property is automatically updated by GDK, so this function should only be used by applications which handle input events bypassing GDK. Я готов добавить вместо неё пустышку. Нет такого. Python2 EOL. Вру, есть. (Ответ для Grigory Ustinov на комментарий #13) > Вру, есть. Я разобрался со всеми его пользователями, но нас подвёл GIMP — в текущей версии он всё ещё на python2, а новая только в процессе выпуска. И все мы знаем, как редко там появляются новые пользователи. |