LINUX.ORG.RU

Libglade + KDE (3.5) - не отображается ui


0

0

Здравствуйте. Хотел начать быстро программировать gtk ui с libglade. Но не получается. Нашел вариант с программированием с GtkBuilder - та же проблема.

Вот в чем проблема: делаю минимальное приложение (точнее даже почти копипастю с источников), в консоли запускаю $ ./a.out - все работает, запускается мной нарисованное окошко. Запускаю из оболочки KDE - окно не показывается. Но процесс висит в памяти. Компилирую $ gcc glade.c `pkg-config --cflags --libs libglade-2.0`

#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <glade/glade.h>

static gboolean delete_event(GtkWidget * widget, GdkEvent * event, gpointer data)
{
  return FALSE;
}
static void destroy(GtkWidget * widget, gpointer data)
{
  gtk_main_quit();
}

int main (int argc, char **argv)
{
	GladeXML * xml;
	GtkWidget * app_window;
    gtk_init(&argc, &argv);
    glade_init();
    xml = glade_xml_new("app.glade", "window", NULL);
	glade_xml_signal_autoconnect (xml);
	app_window = glade_xml_get_widget (xml, "window");
	g_signal_connect(G_OBJECT(app_window), "delete_event", G_CALLBACK(delete_event), NULL);
	g_signal_connect(G_OBJECT(app_window), "destroy", G_CALLBACK(destroy), NULL);
	gtk_widget_show_all(app_window);
    gtk_main();
    return 0;
}
Перезагружался в Gnome, именно этот откомпилированный бинарник работает нормально. Можно было бы погрешить на KDE, но я пробовал запускать из оболочки linuxdcpp (gtkmm/glade) - так он запускается нормально. Я уже и пытался разобраться в исходниках linuxdcpp, но запутался в них и не увидел на свой взгляд заветных строчек. Система Debian Lenny + KDE 3.5

Надо сделать так, чтобы бинарник запускался из KDEшной оболочки с отображением ui (окном).

Заранее благодарю.


Ответ на: комментарий от mv

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://gazpacho.sicem.biz/gazpacho-0.1.dtd">
<glade-interface>
    <widget class="GtkWindow" id="window">
        <property name="default_height">250</property>
        <property name="default_width">440</property>
        <child>
            <widget class="GtkVBox" id="vbox1">
                <property name="visible">True</property>
                <child>
                    <widget class="GtkButton" id="button1">
                        <property name="is_focus">True</property>
                        <property name="label" context="yes" translatable="yes">button1</property>
                        <property name="visible">True</property>
                    </widget>
                </child>
                <child>
                    <widget class="GtkLabel" id="label1">
                        <property name="label" context="yes" translatable="yes">label1</property>
                        <property name="visible">True</property>
                        <property name="xalign">0.0</property>
                    </widget>
                    <packing>
                        <property name="position">1</property>
                    </packing>
                </child>
                <child>
                    <widget class="GtkTextView" id="textview1">
                        <property name="visible">True</property>
                    </widget>
                    <packing>
                        <property name="position">2</property>
                    </packing>
                </child>
            </widget>
        </child>
    </widget>
</glade-interface>

А вообще любой glade файл, сгенерированный Glade или Gazpacho, хоть много элементов, хоть одна только форма

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

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://gazpacho.sicem.biz/gazpacho-0.1.dtd">
<glade-interface>
    <widget class="GtkWindow" id="window">
        <property name="default_height">250</property>
        <property name="default_width">440</property>

Сюда добавь: <property name="visible">True</property>

Или в программе свойство visible в true у window выставляй.

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

mv: Весьма благодарен за ответ, однако проблема осталась: строчка появилась такая, но окно не стало появляться.

Еще раз хотелось бы обратить внимание, что окно появляется при запуске из DE Gnome или из консоли (даже если консоль в KDE).

<glade-interface>
  <widget class="GtkWindow" id="window">
    <property name="visible">True</property>
    <property name="default_width">440</property>
    <property name="default_height">250</property>

diclev
() автор топика

попробуй написать тестовое приложение без глейда, т.е нарисуй форму руками. И запусти в КДЕ.

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

Хорошо работает любое приложение GTK. Даже собственноручно написанное мной.

Заметьте, что LinuxDC++, сделанный на gtkmm и том же libglade вполне нормально запускается.

Думал, может, кто-то делает gui для gtk...

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

> Думал, может, кто-то делает gui для gtk...

А я вот ещё с таким сталкивался: в глейдовской форме выставлено visibility=true, однако, программа (virt-manager) сразу после загрузки формы прятало окошко. Потом, доинициализировав, что нужно, посылало сообщение на отрисовку, но окно в одном оконном менеджере не появлялось, т.к. от иксов приходило другое событие, которое этот менеджер не обрабатывал. Причём, баг стал проявляться только на одной из последних версий иксов.

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

Решено так:

добавлена строчка system("env > /home/diclev/Desktop/ENV.txt");

Путем сравнения двух файлов (апп запущено из консоли и из оболочки) выяснено что при запуске из оболочки, PWD=/home/diclev, а из консоли - полный путь.

Для проверки app.glade был брошен в домашнюю папку, после чего нормально запустился. Вот же, а Gnome DE, получается, добавляет полный путь в PWD..

Извиняюсь за беспокойство.

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