Bug 15067

Summary: Падают python приложения использующие gtk.gdk.Window.set_user_time
Product: Sisyphus Reporter: Igor Androsov <blacester>
Component: python-module-pygtkAssignee: Vitaly Lipatov <lav>
Status: REOPENED --- QA Contact: qa-sisyphus
Severity: major    
Priority: P2 CC: antohami, cas, cow, evg, george, grenka, imz, kotopesutility, lav, mutabor, nbr, qa_viy, rider, sem, shaba, sin, slev, toni, vitty, viy
Version: unstable   
Hardware: all   
OS: Linux   

Description Igor Androsov 2008-03-25 00:33:08 MSK
В частности замечен deskbar-applet (в Сизиф не уходит из-за
неработоспособности), не проверен, так как на данный момент не собиарюсь его
собирать - orca.

Привожу то что он вывидит.

03-25 00:21 deskbar.core.ModuleLoader INFO     Initializing Действия с компьютером
Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/deskbar/ui/DeskbarTray.py", line 53, in
on_button_press
    self.set_active(not self.active, event.time)
  File "/usr/lib/python2.5/site-packages/deskbar/ui/DeskbarTray.py", line 64, in
set_active
    self.__show_toggle(self, time)
  File "/usr/lib/python2.5/site-packages/deskbar/ui/DeskbarTray.py", line 125,
in __show_toggle
    self.__controller.on_keybinding_activated(widget, time, False)
  File "/usr/lib/python2.5/site-packages/deskbar/ui/CuemiacWindowController.py",
line 34, in on_keybinding_activated
    self._view.receive_focus(time)
  File "/usr/lib/python2.5/site-packages/deskbar/ui/CuemiacWindowView.py", line
187, in receive_focus
    self.window.set_user_time(time)
AttributeError: 'gtk.gdk.Window' object has no attribute 'set_user_time'

У себя отключил следующие напильники 
# create our version of gdkconfig.h
# disable direct X11 using in python module
# don't like x11 symbols due directfb

и ситуация исправилась.
Steps to Reproduce:
1. Устанавливаем deskbar-applet (если скажете куда, выложу).
2. Добавляем его на панель gnome
3. Клик по апплету и получаем ошибку.
Comment 1 Igor Androsov 2008-03-25 00:42:25 MSK
Прошу прощения, необходимо баг перевесить на основной пакет -
python-module-pygtk, сюда попал похоже из-за моей невнимательности.
Comment 2 Vitaly Lipatov 2008-03-25 16:24:49 MSK
А каким образом функция set_user_time связана с X11?
Да, и если deskbar-applet'а рабочего в Сизифе сейчас нет, то не будет хуже его
туда положить.
Comment 3 Igor Androsov 2008-03-26 09:52:12 MSK
(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
Comment 4 Yury Aliaev 2008-03-31 17:48:04 MSD
Здесь вообще всё интересно... Когда я попытался использовать функцию
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 эта функция отсутствует.
Comment 5 Igor Androsov 2008-03-31 18:29:47 MSD
(In reply to comment #4)

Хм, а если не сложно код в студию, как завершу перевод системы на 64бита, посмотрю.
Comment 6 Yury Aliaev 2008-04-01 12:00:08 MSD
#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();
}
Comment 7 Igor Androsov 2008-04-01 22:20:07 MSD
> 	gtk_window_set_user_time(window->window, 12345);
А может будет вернее gdk_x11_window_set_user_time(window->window, 12345);
Comment 8 Yury Aliaev 2008-04-02 12:40:52 MSD
Да, с 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.
Comment 9 Mikhail Gusarov 2008-06-13 13:00:39 MSD

    
Comment 10 Ivan Fedorov 2008-07-05 11:18:12 MSD
не моё
Comment 11 Vitaly Lipatov 2008-07-06 00:29:00 MSD
А зачем нужна эта функция в данном случае? Я про неё читаю
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.

Я готов добавить вместо неё пустышку.
Comment 12 Grigory Ustinov 2021-09-17 14:50:16 MSK
Нет такого. Python2 EOL.
Comment 13 Grigory Ustinov 2021-09-17 14:51:46 MSK
Вру, есть.
Comment 14 Vitaly Lipatov 2021-09-17 16:09:49 MSK
(Ответ для Grigory Ustinov на комментарий #13)
> Вру, есть.
Я разобрался со всеми его пользователями, но нас подвёл GIMP — в текущей версии он всё ещё на python2, а новая только в процессе выпуска. И все мы знаем, как редко там появляются новые пользователи.