добрый день, я пишу плагин для приложения, мордочка у которого написана на GTK. мне из плагина необходимо общаться с пользователем, не подскажете как получить GtkWEidget указывающий на основное окно программы, что бы встроить в него кнопку? есть какие-нибудь функции, что бы узнать gtkWidget любого виджета?
ps приложение - wireshark
получить gtkWidget окна
Модератор: Модераторы разделов
-
sergio
- Сообщения: 436
- Статус: Интересующийся новичок
- ОС: Debian GNU/Linux 4 & 5
Re: получить gtkWidget окна
Хоть на какой-нибудь виджет приложения есть ссылка?
Сунул нос в референс - нашел такое:
gtk_widget_get_parent_window ()
GdkWindow* gtk_widget_get_parent_window (GtkWidget *widget);
Определяет родительское окно для widget's.
widget : GtkWidget.
Возвращает : Родительское окно widget.
Вот вижу еще:
gtk_widget_get_root_window ()
GdkWindow* gtk_widget_get_root_window (GtkWidget *widget);
Определяет основное окно в котором распределён данный виджет. Эта функция может быть вызвана только после добавления виджета к верхней иерархии виджетов GtkWindow.
Основное окно полезно для таких целей как создание всплывающего GdkWindow связанного с окном. В основном, вы должны создавать только ресурсы определяющие отображение виджета при реализации и должны освобождать эти ресурсы когда реализация виджета аннулирована (unrealized).
widget : GtkWidget
Возвращает : GdkWindow основное окно верхнего уровня для виджета.
Начиная с версии 2.2
Это весьма похоже на то что хотели. Правда не понял, что же тогда было первое...
Надеюсь, уже последнее:
gtk_widget_get_toplevel ()
GtkWidget* gtk_widget_get_toplevel (GtkWidget *widget);
Эта функция возвращает самый верхний виджет в контейнерной иерархии widget. Если widget не имеет родительского виджета, он будет возвращён как виджет верхнего уровня. На возвращаемый виджет не добавляется ссылок; он не должен освобождаться.
Помните о различных поведениях gtk_widget_get_ancestor(); gtk_widget_get_ancestor (widget, GTK_TYPE_WINDOW) вернёт NULL если widget был в окне верхнего уровня, и если окно было внутри GtkWindow-наследника виджета который был в свою очередь внутри GtkWindow верхнего уровня. В то время как второй случай может показаться мало вероятным, он происходит когда GtkPlug встроен в GtkSocket внутри некоторого приложения.
Для надёжного определения GtkWindow верхнего уровня, используйте gtk_widget_get_toplevel() и контролируйте установлен ли флаг TOPLEVEL в результате.
Код: Выделить всё
GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
if (GTK_WIDGET_TOPLEVEL (toplevel))
{
[ Perform action on toplevel. ]
}widget : GtkWidget
Возвращает :Самый верхний предок виджета widget, или сам widget, если у него нет предков.
Есть смысл взять оригинальный текст и попытаться понять кто есть ху. От этих переводов на русский обыкновенно только путаница в терминологии добавляецо...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
-
dem
- Сообщения: 14
Re: получить gtkWidget окна
Хоть на какой-нибудь виджет приложения есть ссылка?
вот в этом то и вся проблемма, что ни на какой виджет нету указателя, как говорят на ЛОРе, если автор не позаботился о том, что б оставить указатель на вижет окна, то получть его нельзя. но как-то это странно, неужто по имени окна нельзя получить указатель на него
спасбо за ответ, буду копать SDK приложения, возможно там найду решение